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