如何在Python 3中将十六进制字符串转换为带符号的int型?
我能想到的最好办法就是
h = '9DA92DAB'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))
有更简单的方法吗?无符号更简单:整数(小时,16)
顺便说一句,问题的起源是itunes persistent id - music library xml version and iTunes hex version
5条答案
按热度按时间bmp9r5qi1#
在n位二进制补码中,位具有值:
位0 = 20
位1 = 21
位n-2 = 2n-2
位n-1 = -2n-1
但是位n-1在无符号时的值为2n-1,因此数字2n太大。如果位n-1被设置,则减去2n:
输出:
sxpgvts32#
对于Python 3(有注解的帮助):
对于Python 2:
或者如果它是小端字节序:
pxq42qpu3#
下面是一个通用函数,可用于任意大小的十六进制:
要使用它:
mrfwxfqh4#
这适用于16位有符号整型数,你可以扩展到32位整型数。它使用了2的补码有符号数的基本定义。还要注意,与1的异或与二进制求反相同。
ttp71kqs5#
这是一个很晚的答案,但这里有一个函数来做以上。这将扩展到任何长度,你提供。信贷的一部分,这是另一个SO的答案(我失去了链接,所以请提供它,如果你找到它)。