我有一个十六进制正数和负数的数组。我想将它们转换为十进制值:
>>> int("f107",16)
61703
>>>
如何让Python将f107
看作二进制补码呢?换句话说,我想要的是-3833
,而不是61703
。该怎么做呢?
我有一个十六进制正数和负数的数组。我想将它们转换为十进制值:
>>> int("f107",16)
61703
>>>
如何让Python将f107
看作二进制补码呢?换句话说,我想要的是-3833
,而不是61703
。该怎么做呢?
这是一个非常简单的功能:
def twos_complement(n, w):
if n & (1 << (w - 1)): n = n - (1 << w)
return n
例子:
>>> twos_complement(61703, 16)
-3833
struct.unpack(">h","f107".decode("hex"))
0xf107
= encode_to_bytes => "\xf1\x07"
由于它是两个字节,我们可以将它解包为>
大端h
有符号短整数。