我有一个十六进制字符串,例如:0xb69958096aff3148
我想将其转换为带符号的整数,例如:-5289099489896877752
在Python中,如果我在上述十六进制数字上使用int()函数,它将返回一个正值,如下所示:
>>> int(0xb69958096aff3148)
13157644583812673864L
但是,如果我在Windows计算器上使用“十六进制”至“十进制”功能,则得到的值为:-5289099489896877752
我需要上面的签名表示。
对于32位数字,据我了解,我们可以执行以下操作:
struct.unpack('>i', s)
如何对64位整数进行处理?
谢谢。
答案 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