我正在处理硬件外围设备,它暴露了测量功率的可写特性。根据硬件供应商的规格,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)];
答案 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”