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

Python将十六进制字符串转换为带符号整数,python,Python,我有一个十六进制字符串,例如:0xb69958096aff3148 我想把它转换成有符号整数,比如:-5289099489896877752 在Python中,如果我对上述十六进制数使用int()函数,它将返回一个正值,如下所示: >>> int(0xb69958096aff3148) 13157644583812673864L 但是,如果在Windows Calculator上使用“十六进制”到“十二进制”功能,则得到的值为:-5289099489896877752 我需要

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

我想把它转换成有符号整数,比如:-5289099489896877752

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

>>> int(0xb69958096aff3148)
13157644583812673864L
但是,如果在Windows Calculator上使用“十六进制”到“十二进制”功能,则得到的值为:-5289099489896877752

我需要上面签字的陈述

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

struct.unpack('>i', s)
如何处理64位整数


谢谢。

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

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


print(signed_int('0xb69958096aff3148'))
输出

-5289099489896877752

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


>>struct.unpack(“我建议通过conda或pip提供
位字符串

from bitstring import BitArray
b = BitArray('0xb69958096aff3148')
b.int
# returns
-5289099489896877752
想要无符号整数吗?:

b.uint
# returns:
13157644583812673864
或者
struct.unpack('>q',bytearray.fromhex('b69958096aff3148'))
b.uint
# returns:
13157644583812673864