我有一个NSData对象,首先我要将NSData对象转换为字节,然后读取此NSData对象中的前四个字节&然后将前四个字节转换为等效的整数值。 关于如何解决这个问题的任何想法?
如何将所有四个字节转换为单个正整数值?
答案 0 :(得分:5)
从原始数据中获取int是不明确的:数据来自何处?你想要什么尺寸的int?你想让他们签名或签名吗?你期望什么字节顺序?
所以这里有一个场景:您获得的数据来自外部进程编码的流,该进程以big-endian顺序提供32位有符号整数。这是你如何做到的:
NSData *dataFromStream = functionThatReturnsNSData();
SInt32 *signedInt32pointer = [dataFromStream bytes];
SInt32 unSwappedInt32 = *signedInt32pointer;
SInt32 reorderedInt32 = CFSwapInt32BigToHost(unSwappedInt32);
RTFM核心基础内存管理编程指南的字节排序和字节交换部分。
答案 1 :(得分:4)
这很简单。使用bytes
获取字节,然后转换为unsigned char*
unsigned char *n = [yourNSData bytes];
int value1 = n[0];
int value2 = n[1];
int value3 = n[2];
int value4 = n[3];
要将此转为单int
,假设bytes
包含有效的int
:
int result = *(int *)n;
答案 2 :(得分:0)
int n ; // first n bytes
NSData *data; // your data
NSData *subData = [data subdataWithRange:NSMakeRange(0, n)]; // make sure if data has n bytes
NSString *stringData = [subData description];
stringData = [stringData substringWithRange:NSMakeRange(1, [stringData length]-2)];
unsigned dataAsInt = 0;
NSScanner *scanner = [NSScanner scannerWithString: stringData];
[scanner scanHexInt:& dataAsInt];