从整数
问题描述:
我的整数,具有2的值的NSData字节的I追加一条与一个NSMutableData对象:从整数
[data appendBytes:&intVal length:2];
数2是予从INT想要的字节数。当我记录数据时,我想看到的是< 0002>(一个空字节后跟一个非空字节),但我得到的是< 0200>。
我错过了什么吗?字节的顺序和长度需要非常明确。这是一个直接套接字连接API。我不确定我在这里做错了什么。也许我只是读错了。
感谢您的帮助。
答
我错过了什么吗?
是的,你的系统的字节序不符合你的需要。将其转换为小端或大端(POSIX C库在<netinet.h>
或<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);
您是否知道sizeof(int)可能与2不同? – 2013-02-13 22:20:00
尝试挖掘_low-endian_,_big-endian_表示之间的差异,也许它会帮助你。 – holex 2013-02-13 22:40:15
sizeof(int)在这种情况下绝对大于2(它是4)。然而,我使用的API要求数据包的这个特定部分只有2个字节长。 – btomw 2013-02-14 14:39:13