如何将NSData字节转换为NSNumber或NSInteger?

Cen*_*ion 3 iphone objective-c nsdata ios

有一种特殊的NSString initWithData方法可以抓取位并将它们转换为字符串.但是,我没有在NSNumber课堂参考中找到.目前,我正在以NSData格式从服务器获取原始数据(字节).我知道如何在C中使用memcpy和使用int指针.但我很好奇直接做的便利方法是什么NSData.无需转换.例如,我正在获取00000010字节,我需要将其转换NSNumber为值2,或者NSInteger.

iku*_*dia 8

NSData只是一个字节桶,不知道其中包含的数据. NSStringinitWithData:encoding:方法是一个倒数(它的对面)此方法:

- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
Run Code Online (Sandbox Code Playgroud)

因此,要完全回答您的问题,了解您的数字最初是如何被强制转换为NSData对象的,这一点很重要.一旦知道编码功能,搜索就是相互函数.

根据您在问题中的内容,可能会有许多不同的解决方案.但是,您可能可以使用以下行中的某些内容getBytes:length:在NSData对象上使用转换为可用的数字格式.例如

NSUInteger decodedInteger;
[myDataObject getBytes:&decodedInteger length:sizeof(decodedInteger)];
Run Code Online (Sandbox Code Playgroud)

您可以将类型更改decodedInteger为适合NSData对象中字节的任何类型.

  • @Centurion当(de)以这种方式序列化字节时,你应该总是考虑字节序.请参阅Foundation/NSByteOrder.h中的`NSSwap ...`函数族. (2认同)
  • @Centurion是的.原因是表示big-endian和little-endian系统内存中的数字的字节序列是不同的.您必须知道序列化数字的字节顺序才能正确解释它.如果它在没有转换的情况下工作,则CPU和发送CPU的字节顺序是相同的.但是你不想做任何假设,因为你的字节源机器的字节序可能会改变,因为没有什么能阻止Apple制作PowerPC iPad.最好从一开始就做到这一点,因为修复字节顺序是一场噩梦. (2认同)