【问题标题】:Hex to 2's complement in objective-cObjective-c中的十六进制到2的补码
【发布时间】:2014-12-21 09:38:10
【问题描述】:

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

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

【问题讨论】:

  • 我也面临如何将十六进制直接转换为二进制补码的问题。你得到解决方案了吗?你能指导我完成这个吗?

标签: objective-c twos-complement


【解决方案1】:

我正在尝试转换十六进制值,例如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

【讨论】:

    猜你喜欢
    • 2014-11-03
    • 2011-10-05
    • 2014-04-19
    • 2013-02-02
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多