objective-c中的Hex到2的补码

时间:2014-12-21 09:38:11

标签: objective-c twos-complement

我正在尝试转换十六进制值,例如0xFAE8到2的补码十进制,即-1304

我试过看Convert binary two's complement data into integer in objective-c 但我真的不知道字节转换如何使转换正确完成。我希望可以有一个解释或更简单的方法来做到这一点。感谢。

1 个答案:

答案 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