1

同様の質問をいくつか見ましたが、これを正しく理解できません。

'0xFF3C' などの NSData オブジェクトで 16 ビットの符号付き整数を受け取りました。ここから正しい数字を読み取るにはどうすればよいでしょうか。

編集:ジェームズ・ウェブスターの答えで私は得る:

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

これは明らかに正しくありません (私は +/- 2000 を期待しています)

編集:いくつかのコード:

-(void)characteristicValueRead:(CBCharacteristic *)characteristic{

  unsigned short myInt = (int) [characteristic.value bytes];
  NSLog(@"Received value: %@", characteristic.value);
  NSLog(@"Converted value: %i",(int)myInt);
}

このスニペットを使用すると、次のようになります。

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>

これは本当に面白い/迷惑に見えます。これは何に由来するのでしょうか?

4

3 に答える 3

1

実はかなり難しい問題!

これは私が試した約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

于 2012-08-07T08:08:11.757 に答える
1

それを行う簡単な方法を見つけました。それが機能するかどうかを確認してください。

これは私がしました:

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

そして、必要な長さに変更するだけです。

于 2014-05-09T17:48:52.597 に答える
0

私は自分でそれをしたことはありません。ただし、2 バイト データが myData にあると仮定すると、これは機能するはずです。

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

myData.length が本当に 2 に等しいかどうかをテストすることができます。

于 2012-08-07T08:12:31.893 に答える