如何将NSData字节转换成NSNumber或NSInteger?
有一个特殊的NSString
initWithData
方法用于抓取位并将它们转换为string。 不过,我还没有发现在NSNumber
类的参考。 目前,我从NSData
格式的服务器获取原始数据(字节)。 我知道如何在C中使用memcpy
和int
指针。 但是我很好奇从NSData
直接做什么的便利方法。 不需要转换。 例如,我得到00000010
字节,我需要将其转换为NSNumber
的值2或NSInteger
。
NSData
只是一个字节桶,不知道其中包含的数据。 NSString
的initWithData:encoding:
方法是这个方法的倒数(它正好相反):
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
因此,要充分回答您的问题,了解您的数字如何被强制转换为NSData
对象是很重要的。 一旦你知道了编码function,search是为了相互的function。
从问题中包含的内容可能会有许多不同的解决scheme。 但是,您可能可以使用下列行中的某些内容,使用getBytes:length:
在您的NSData对象上转换为可用的数字格式。 例如
NSUInteger decodedInteger; [myDataObject getBytes:&decodedInteger length:sizeof(decodedInteger)];
您可以将decodedInteger
的types更改为适合NSData
对象中的字节的types。
尝试这个:
NSNumber *num = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsNSData];
编辑:
正如Matthias Bauch所指出的那样,这不适用于你的情况。 这只适用于如果您的NSNumber对象被归档到NSData对象。
NSString来拯救:
const unsigned char *bytes = [serverData bytes]; NSInteger aValue = [NSString stringWithFormat:@"%2x", bytes[0]].integerValue;
该文档警告使用NSScanner进行本地化的十进制数字,但在这种情况下,这并不重要。
这是答案
//Integer to NSData +(NSData *) IntToNSData:(NSInteger)data { Byte *byteData = (Byte*)malloc(4); byteData[3] = data & 0xff; byteData[2] = (data & 0xff00) >> 8; byteData[1] = (data & 0xff0000) >> 16; byteData[0] = (data & 0xff000000) >> 24; NSData * result = [NSData dataWithBytes:byteData length:4]; NSLog(@"result=%@",result); return (NSData*)result; }
有关更多详细信息,请参阅https://stackoverflow.com/a/20497490/562812