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

有一个特殊的NSString initWithData方法用于抓取位并将它们转换为string。 不过,我还没有发现在NSNumber类的参考。 目前,我从NSData格式的服务器获取原始数据(字节)。 我知道如何在C中使用memcpyint指针。 但是我很好奇从NSData直接做什么的便利方法。 不需要转换。 例如,我得到00000010字节,我需要将其转换为NSNumber的值2或NSInteger

NSData只是一个字节桶,不知道其中包含的数据。 NSStringinitWithData: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