Python将十六进制字符串转换为带符号整数

时间:2018-12-01 01:38:16

标签: python

我有一个十六进制字符串,例如:0xb69958096aff3148

我想将其转换为带符号的整数,例如:-5289099489896877752

在Python中,如果我在上述十六进制数字上使用int()函数,它将返回一个正值,如下所示:

>>> int(0xb69958096aff3148)
13157644583812673864L

但是,如果我在Windows计算器上使用“十六进制”至“十进制”功能,则得到的值为:-5289099489896877752

我需要上面的签名表示。

对于32位数字,据我了解,我们可以执行以下操作:

struct.unpack('>i', s)

如何对64位整数进行处理?

谢谢。

3 个答案:

答案 0 :(得分:2)

如果要将其转换为64位有符号整数,则仍然可以使用struct并将其打包为无符号整数('Q'),然后将其打包为有符号('q') :

>>> struct.unpack('<q', struct.pack('<Q', int('0xb69958096aff3148', 16)))
(-5289099489896877752,)

答案 1 :(得分:1)

您可以制作this的64位版本,例如:

def signed_int(h):
    x = int(h, 16)
    if x > 0x7FFFFFFFFFFFFFFF:
        x -= 0x10000000000000000
    return x


print(signed_int('0xb69958096aff3148'))

输出

-5289099489896877752

答案 2 :(得分:1)

我建议您通过conda或pip获得bitstring软件包。

from bitstring import BitArray
b = BitArray('0xb69958096aff3148')
b.int
# returns
-5289099489896877752

是否想要无符号的int?:

b.uint
# returns:
13157644583812673864