如何在Objective-C中将6位整数(例如“ 1234674”)转换为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 one相同。

最佳答案

尝试这个:

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


假设您要输出大字节序。

07-26 09:40