我正在尝试转换十六进制值,例如0xFAE8
到2的补码十进制,即-1304
。
我试过看Convert binary two's complement data into integer in objective-c 但我真的不知道字节转换如何使转换正确完成。我希望可以有一个解释或更简单的方法来做到这一点。感谢。
答案 0 :(得分:0)
我正在尝试转换十六进制值,例如0xFAE8到2的补码十进制,即-1304。
如果设置了最高有效位(MSB),则必须翻转或反转所有位并添加1.这是一般算法:
if (msb_is_set) then
x = to_integer(...)
x = ~x
x = x + 1
else
x = to_integer(...)
endif
它省略了溢出检查,因此请务必在生产代码中处理这些情况。
您可以测试msb或高位是否设置为:
if((0x80 & byte[0]))
/* high bit is set */
endif