首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将NSData转换为int

将NSData转换为int
EN

Stack Overflow用户
提问于 2011-09-07 18:53:12
回答 6查看 31.6K关注 0票数 21

我有一个NSData对象,它的长度是4字节,我是从另一个NSData对象中提取的,

代码语言:javascript
复制
fourByteData=[completeData subdataWithRange:NSMakeRange(0, 16)];

我的第一个问题是,上面的语句会提供完整数据的前四个字节吗?

如果为Yes,则如何将所有这些字节转换为等效的int。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-07 19:25:23

268566528是您期望的值,还是您期望的528值?如果正确的值是528,那么字节顺序是大端的,但是cpu是小端的,字节需要颠倒。

因此,如果正确的值应该是528,那么:

代码语言:javascript
复制
NSData *data4 = [completeData subdataWithRange:NSMakeRange(0, 4)];
int value = CFSwapInt32BigToHost(*(int*)([data4 bytes]));

另请注意,网络标准顺序为big-endian。

票数 34
EN

Stack Overflow用户

发布于 2011-09-07 18:59:27

该语句将提供前16个字节的数据,而不是4个字节。要获得前4个字节,您需要将语句修改为:

代码语言:javascript
复制
fourByteData = [completeData subdataWithRange:NSMakeRange(0, 4)];

要将数据从NSData对象读取到整数,您可以执行以下操作:

代码语言:javascript
复制
int theInteger;
[completeData getBytes:&theInteger length:sizeof(theInteger)];

如果您只是将其转换为整数,则不需要获取前4个字节。您可以通过上面的两行代码和您的completeData接收器直接执行此操作

票数 26
EN

Stack Overflow用户

发布于 2011-09-07 19:00:36

不,您将获得16字节的数据,因为范围是从偏移量0开始,然后是16字节。

如果你有一个4字节的NSData实例,那么你可以像这样做一个简单的类型转换:

代码语言:javascript
复制
int value = *(int*)([data bytes]);
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7332641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档