我有一个NSData对象,它的长度是4字节,我是从另一个NSData对象中提取的,
fourByteData=[completeData subdataWithRange:NSMakeRange(0, 16)];
我的第一个问题是,上面的语句会提供完整数据的前四个字节吗?
如果为Yes,则如何将所有这些字节转换为等效的int。
发布于 2011-09-07 19:25:23
268566528是您期望的值,还是您期望的528值?如果正确的值是528,那么字节顺序是大端的,但是cpu是小端的,字节需要颠倒。
因此,如果正确的值应该是528,那么:
NSData *data4 = [completeData subdataWithRange:NSMakeRange(0, 4)];
int value = CFSwapInt32BigToHost(*(int*)([data4 bytes]));
另请注意,网络标准顺序为big-endian。
发布于 2011-09-07 18:59:27
该语句将提供前16个字节的数据,而不是4个字节。要获得前4个字节,您需要将语句修改为:
fourByteData = [completeData subdataWithRange:NSMakeRange(0, 4)];
要将数据从NSData对象读取到整数,您可以执行以下操作:
int theInteger;
[completeData getBytes:&theInteger length:sizeof(theInteger)];
如果您只是将其转换为整数,则不需要获取前4个字节。您可以通过上面的两行代码和您的completeData
接收器直接执行此操作
发布于 2011-09-07 19:00:36
不,您将获得16字节的数据,因为范围是从偏移量0开始,然后是16字节。
如果你有一个4字节的NSData
实例,那么你可以像这样做一个简单的类型转换:
int value = *(int*)([data bytes]);
https://stackoverflow.com/questions/7332641
复制相似问题