如何使python看起来像二进制补码?

时间:2015-11-15 04:32:20

标签: python python-2.7 numbers twos-complement

我有一组十六进制正数和一个数字。我想将它们转换为十进制值:

>>> int("f107",16)
61703
>>> 

如何让python将f107看作是两个补码?换句话说,我想要-3833而不是61703。我怎样才能实现它?

2 个答案:

答案 0 :(得分:3)

这是一个非常简单的功能:

def twos_complement(n, w=32):
    if n & (1 << (w - 1)): n = n - (1 << w)
    return n

示例:

>>> twos_complement(61703, 16)
-3833

与Joran的答案不同,它支持任意位宽。

答案 1 :(得分:2)

struct.unpack(">h","f107".decode("hex"))

0xf107 = encode_to_bytes =&gt; "\xf1\x07"

因为它的两个字节我们只需将其解压缩为> big-endian h signed-short