Ios 将无符号整数转换为十六进制值

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);

如何在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);
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)];