将负整数写为0xnn十六进制到外设

时间:2013-12-21 06:30:54

标签: ios objective-c c integer signed

我正在处理硬件外围设备,它暴露了测量功率的可写特性。根据硬件供应商的规格,Measured Power应以“0xnn”格式发送。我不知道如何将负整数(-59)转换为1字节十六进制表示(0xnn)。

到目前为止,我已尝试过以下

int iPower = -59;
int16_t power = CFSwapInt16HostToBig(iPower);
NSData *powerData = [NSData dataWithBytes:&power length:sizeof(power)]; 

但这会将0xFF写入外设,十进制为255。有什么想法吗?

甚至尝试通过下面的代码发送原始字节,并且达到0xC5,即十进制的197。

NSInteger index = -59;
NSData *powerData = [NSData dataWithBytes:&index length:sizeof(index)];

1 个答案:

答案 0 :(得分:1)

I am not sure how do we convert a negative integer (-59) into 2 bytes hex representation (0xnn).

如果您有两个字节用于十六进制表示,则意味着您可以为非负整数或2的赞美表示0x0000 ~ 0xFFFF提供一系列0~65535个数字或-32768 ~ 23767

在两个字节的十六进制中使用2的补码表示-59将是0xFFC5

同时检查你是否真的需要使用它:“CFSwapInt16HostToBig”