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