0

我有一个整数,值为 2。我将它附加到一个 NSMutableData 对象:

[data appendBytes:&intVal length:2];

数字 2 是我想要的 int 字节数。当我记录数据时,我想看到的是 <0002>(一个空字节后跟一个非空字节),但我得到的是 <0200>。

我错过了什么吗?字节的顺序和长度需要非常具体。这是用于直接套接字连接 API。我不确定我在这里做错了什么。也许我只是读错了。

谢谢您的帮助。

4

3 回答 3

2

我错过了什么吗?

是的,您系统的字节序与您需要的不匹配。将其转换为小端或大端(POSIX C 库在<netinet.h>or<inet.h>标头中的某处具有用于此目的的函数)。

于 2013-02-13T22:20:58.260 回答
0

NSData 的描述方法以十六进制格式打印它的值。这意味着它需要 4 位数字来表示 2 个字节,每个字节可能映射 2^8=256 个不同的值,每个十六进制数字可能映射 16 个可能的值,所以 16x16x16x16 = 2^16,这正是您可以用 2 个字节映射的值.

于 2013-02-13T22:18:22.840 回答
0

这是答案,它很好用!

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);
于 2013-12-10T15:05:00.910 回答