在iOS中将NSData转换为Int返回的垃圾值

问题描述 投票:-1回答:1

数据:

<< 5b005c00 5d005e00 5f006000 61006200 63006400>

输出:6029403

上面的数据长度为20bytes,它应该返回0-100范围内的值,

我使用的代码:

ppData = [ppData subdataWithRange:NSMakeRange(0, 20)];

int value = *(int*)([ppData bytes]);
NSLog(@"int rec %d",value);
ios objective-c nsdata
1个回答
0
投票
您的数据似乎是10个16位整数:91、92,...,100;以Little-Endian格式布置。 MacOS和iOS为低位优先级[*],因此要获取第一个值作为int,请将代码更改为:

int value = *(int16_t *)ppData.bytes;

[Objective-C]语言本身负责将RHS的int16_t值转换为存储到int中所需的value(在MacOS / iOS上为32位)值。

HTH

[*]当平台和数据的字节序不同时,您需要调用通常提供的适当的字节交换函数。

© www.soinside.com 2019 - 2024. All rights reserved.