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