Objective c 将NSData转换为有符号整数

Objective c 将NSData转换为有符号整数,objective-c,nsdata,Objective C,Nsdata,我见过一些类似的问题,但我不能正确回答: 我在NSData对象中接收到一个16位有符号整数,例如“0xFF3C”。我怎样才能从中读出正确的数字 编辑:根据詹姆斯·韦伯斯特的回答,我得到: Received hex value : <0800> Converted value: 803995656 Received hex value : <0a00> Converted value: 803995658 Received hex value : <1a00>

我见过一些类似的问题,但我不能正确回答:

我在NSData对象中接收到一个16位有符号整数,例如“0xFF3C”。我怎样才能从中读出正确的数字

编辑:根据詹姆斯·韦伯斯特的回答,我得到:

Received hex value : <0800>
Converted value: 803995656
Received hex value : <0a00>
Converted value: 803995658
Received hex value : <1a00>
Converted value: 803995674
Received hex value : <faff>
Converted value: 804061178
Received hex value : <e4ff>
Converted value: 804061156
Received hex value : <f0ff>
Converted value: 804061168
通过这个片段,我得到:

Received value: <0000>
Converted value: 26176
Received value: <0000>
Converted value: 46688
Received value: <0000>
Converted value: 30576
Received value: <0000>
Converted value: 2656
Received value: <0000>
Converted value: 50896
Received value: <0000>
接收值:
换算值:26176
接收值:
换算值:46688
接收值:
换算值:30576
接收值:
换算值:2656
接收值:
换算值:50896
接收值:

看起来真的很有趣/烦人。这是怎么回事

实际上是一个相当难的问题

这是我尝试的第20件事,似乎效果不错:

NSData *data = [NSData dataWithBytes:"FF3C" length:4];
NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
string = [@"0x" stringByAppendingString:string];

unsigned short value;
sscanf([string UTF8String], "%hx", &value);

NSLog(@"%d", value);
输出为:

65340


我自己从来没有这样做过。但是,假设您的2字节数据在myData中,这应该是可行的:

unsined short myInt = (int) [myData bytes];

您可能需要测试myData.Length是否真的等于2

我找到了一个简单的方法,看看它是否适合你

我这样做:

int value;
[characteristic.value getBytes:&value length:2];

只需将长度更改为所需的长度。

您是指0xFF3C,即分别表示无符号int 65340或-195的2个字节,还是指包含ascii码或F、F、3和C码的4个字节的字符数组?我假设它只有2个字节。表示-195,忘记添加前面的“0x”NSData没有它所具有的“getBytes”:它应该具有getBytes,因为它具有bytes属性。[myData bytes]也可以。好吧,它是去润滑的。[myData bytes]无论如何都可以工作。我会修好的。谢谢。我收到一个错误:'No visible@interface for
NSData
声明选择器
getBytes
'Yes,请使用myData.bytes或[myData bytes]。抱歉造成混淆。请参阅更新的帖子,我得到了“0xF0FF”的“804061168”,应该得到“-3 841”16位不完全是4字节。NSUInteger表示无符号长整型或无符号整型。我想我们正在寻找无符号短整型。使用'length:2'I get'=803536892'如何在此处获取有符号字节?
int value;
[characteristic.value getBytes:&value length:2];