0

Objective-C で「1234674」などの 6 桁の整数を 16 進数の 4 バイト NSData に変換するにはどうすればよいですか?

これは、パスキーを送信するコードの一部です。

#define HSL_PRIVATE_SERVICE_UUID 0xFF20 
#define HSL_PRIVATE_NEW_PASSKEY_UUID 0xFF35 
unsigned int newPassKey = [_confirmNewPassKey.text intValue];
NSLog(@"newPasskey %d", newPassKey);
NSData *d = [NSData dataWithBytes:&newPassKey length:sizeof(unsigned int)];
[_t writeValue:HSL_PRIVATE_SERVICE_UUID characteristicUUID:HSL_PRIVATE_NEW_PASSKEY_UUID p:_peripheral data:d];

BTOOL と iPhone のパスキー書き込みを比較するエア キャプチャを行いました。

BTOOL (シミュレーターツール) が書きました (正しい結果):

0x40e201 

iPhoneが書いた(間違ったデータ):

 0x0001e240 

Bluetooth デバイスが期待する結果と一致するように、何が起こっているのか、アプリで修正する方法がわからない。結果は BTOOL のものと同じにしたいと思います。

4

1 に答える 1

1

これを試して:

uint32_t value = [_confirmNewPassKey.text intValue];
uint32_t swapped = CFSwapInt32HostToBig(value);
NSData *d = [NSData dataWithBytes:&swapped length:sizeof(swapped)];

これは、出力にビッグ エンディアンが必要であることを前提としています。

于 2013-03-19T23:05:01.690 に答える