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

时间:2012-02-10 08:17:43

标签: iphone objective-c ios nsdata

有一种特殊的NSString initWithData方法可以抓取位并将它们转换为字符串。但是,我没有在NSNumber类ref中找到它。目前,我以NSData格式从服务器获取原始数据(字节)。我知道如何使用memcpyint指针在C中执行此操作。但我很好奇直接从NSData那里做的便利方法是什么。无需转换。例如,我收到00000010字节,我需要将其转换为值{2}的NSNumberNSInteger

4 个答案:

答案 0 :(得分:8)

NSData只是一个字节存储桶,不知道其中包含的数据。 NSString的{​​{1}}方法是此方法的倒数(相反):

initWithData:encoding:

因此,要完全回答您的问题,了解您的数字最初是如何强制转换为- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding 对象非常重要。一旦你知道编码功能,搜索就是互惠函数。

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

getBytes:length:

您可以将NSUInteger decodedInteger; [myDataObject getBytes:&decodedInteger length:sizeof(decodedInteger)]; 的类型更改为适合decodedInteger对象中字节的内容。

答案 1 :(得分:1)

试试这个:

NSNumber *num = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsNSData]; 

编辑:

正如马蒂亚斯·鲍奇所指出的,这对你的情况不起作用。这仅在您的NSNumber对象存档到NSData对象时才有效。

答案 2 :(得分:1)

NSString救援:

const unsigned char *bytes = [serverData bytes];
NSInteger aValue = [NSString stringWithFormat:@"%2x", bytes[0]].integerValue;

文档警告将NSScanner用于本地化的十进制数字,但在这种情况下无关紧要。

答案 3 :(得分:-1)

以下是答案

//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了解更多详情