在Objective-c(iOS)中,字节数组为短值,反之亦然
我将字节数组(NSMutableData)转换为短值在Objective-c(iOS)中,字节数组为短值,反之亦然,ios,objective-c,Ios,Objective C,我将字节数组(NSMutableData)转换为短值 +(short)byteArrayToShort:(NSMutableData *)paRawBytes offset:(int)piOffset{ int iRetVal = -1; int8_t *byteArray = [paRawBytes mutableBytes]; int iLow; int iHigh; if(CFByteOrderGetCurrent() == CFByteOrderBigEndian) {
+(short)byteArrayToShort:(NSMutableData *)paRawBytes offset:(int)piOffset{
int iRetVal = -1;
int8_t *byteArray = [paRawBytes mutableBytes];
int iLow;
int iHigh;
if(CFByteOrderGetCurrent() == CFByteOrderBigEndian)
{
iLow = byteArray[piOffset + 1];
iHigh = byteArray[piOffset + 0];
}
else
{
iLow = byteArray[piOffset + 0];
iHigh = byteArray[piOffset + 1];
}
// Merge high-order and low-order byte to form a 16-bit double value.
iRetVal = (iHigh << 8) | (0xFF & iLow);
return (short)iRetVal;
}
}
请告诉我这是不是正确的方式。。。
提前感谢我想这取决于数据最初存储在
NSMutableData
中的格式。谢谢您的评论。但当数据到来时,我必须转换成字节数组的短值,小值还是大值?您的代码假设它是本地端,但数据可能来自网络,可能是大端。
+(int8_t *)shortToByteArray:(short)piValueToConvert
{
int8_t * aRetVal;
Byte iLowest;
Byte iHigh;
iLowest = (Byte)(piValueToConvert & 0xFF);
iHigh = (Byte)((piValueToConvert >> 8) & 0xFF);
if(CFByteOrderGetCurrent() == CFByteOrderBigEndian)
{
aRetVal[1] = iLowest;
aRetVal[0] = iHigh;
}
else
{
aRetVal[0] = iLowest;
aRetVal[1] = iHigh;
}
return aRetVal;