2013-03-19 135 views
0

如何在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(A仿真工具)写(正确的结果):

0x40e201 

iPhone写了(错误的数据):

0x0001e240 

不知道是怎么回事,以及如何解决它该应用程序,以便结果匹配蓝牙设备的预期。我希望结果与BTOOL相同。

+3

您的主机字节序与协议的字节序不一样。你需要'hton *'或'ntoh *'来转换。 – 2013-03-19 22:32:34

+0

我不确定它如何与NSLog一起工作,但通常你可以使用'%x'而不是'%d'格式化字符串。见http://en.wikipedia.org/wiki/Printf_format_string - 编辑:无视。 @Daniel Fischer为你解答。 – nonsensickle 2013-03-19 22:39:25

回答

1

试试这个:

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

这是假设你想要的输出大端。

相关问题