Ios 将无符号整数转换为十六进制值
如何在Objective-C中将整型6位数(如“1234674”)转换为十六进制4字节NSData 这是我们发送密钥的代码部分:Ios 将无符号整数转换为十六进制值,ios,objective-c,c,core-bluetooth,Ios,Objective C,C,Core Bluetooth,如何在Objective-C中将整型6位数(如“1234674”)转换为十六进制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);
#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(模拟器工具)编写(正确的结果):
iPhone写入(错误数据):
不确定发生了什么,以及如何在应用程序中修复它,以使结果符合蓝牙设备的预期。我希望结果与B工具1相同 试试这个:
uint32_t value = [_confirmNewPassKey.text intValue];
uint32_t swapped = CFSwapInt32HostToBig(value);
NSData *d = [NSData dataWithBytes:&swapped length:sizeof(swapped)];
这假设您希望输出为大端号。您的主机端号与协议的端号不同。您需要
hton*
或ntoh*
进行转换。我不确定它如何与NSLog一起工作,但通常您可以使用格式字符串,使用%x
而不是%d
。请参见--编辑:忽略@丹尼尔·菲舍尔替你回答了。
0x0001e240
uint32_t value = [_confirmNewPassKey.text intValue];
uint32_t swapped = CFSwapInt32HostToBig(value);
NSData *d = [NSData dataWithBytes:&swapped length:sizeof(swapped)];