我有一个整数,值为 2。我将它附加到一个 NSMutableData 对象:
[data appendBytes:&intVal length:2];
数字 2 是我想要的 int 字节数。当我记录数据时,我想看到的是 <0002>(一个空字节后跟一个非空字节),但我得到的是 <0200>。
我错过了什么吗?字节的顺序和长度需要非常具体。这是用于直接套接字连接 API。我不确定我在这里做错了什么。也许我只是读错了。
谢谢您的帮助。
我有一个整数,值为 2。我将它附加到一个 NSMutableData 对象:
[data appendBytes:&intVal length:2];
数字 2 是我想要的 int 字节数。当我记录数据时,我想看到的是 <0002>(一个空字节后跟一个非空字节),但我得到的是 <0200>。
我错过了什么吗?字节的顺序和长度需要非常具体。这是用于直接套接字连接 API。我不确定我在这里做错了什么。也许我只是读错了。
谢谢您的帮助。
我错过了什么吗?
是的,您系统的字节序与您需要的不匹配。将其转换为小端或大端(POSIX C 库在<netinet.h>
or<inet.h>
标头中的某处具有用于此目的的函数)。
NSData 的描述方法以十六进制格式打印它的值。这意味着它需要 4 位数字来表示 2 个字节,每个字节可能映射 2^8=256 个不同的值,每个十六进制数字可能映射 16 个可能的值,所以 16x16x16x16 = 2^16,这正是您可以用 2 个字节映射的值.
这是答案,它很好用!
uint16_t intVal = 2;
Byte *byteData = (Byte*)malloc(2);
byteData[1] = majorValue & 0xff;
byteData[0] = (majorValue & 0xff00) >> 8;
NSData * result = [NSData dataWithBytes:byteData length:sizeof(uint16_t)];
NSLog(@"result=%@",result);