我有一组十六进制正数和一个数字。我想将它们转换为十进制值:
>>> int("f107",16)
61703
>>>
如何让python将f107
看作是两个补码?换句话说,我想要-3833
而不是61703
。我怎样才能实现它?
答案 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