在Python 3.2中,如何将十六进制字符串转换为有符号整数?

我能想出的最好办法就是

h = '9DA92DAB'
b = bytes(h, 'utf-8')
ba = binascii.a2b_hex(b)
print(int.from_bytes(ba, byteorder='big', signed=True))

有没有更简单的方法?Unsigned要简单得多:int(h,16)

顺便说一句,这个问题的起源是itunes persistent id - music library xml version and iTunes hex version

推荐答案

在n位2的补码中,位有值:

位0=20

但是,当无符号时,位n-1的值为2n-1,因此数字2n太高.如果设置了位n-1,则减go 2n:

>>> def twos_complement(hexstr,bits):
...     value = int(hexstr,16)
...     if value & (1 << (bits-1)):
...         value -= 1 << bits
...     return value
...
>>> twos_complement('FFFE',16)
-2
>>> twos_complement('7FFF',16)
32767
>>> twos_complement('7F',8)
127
>>> twos_complement('FF',8)
-1

Python-3.x相关问答推荐

为什么我必须在绘制椭圆时代码等于两次?''

Python3和请求-超文本标记语言:试图抓取一个网站-没有取回真正的超文本标记语言代码

PythonPandas 创建一个列并添加到DataFrame

当索引大于一个整数而小于前一个索引时,我如何返回列值?

我正在try 从 10*3 矩阵中删除随机值并将其变为 10*2 矩阵

CDKTF ec2 具有特定私有 IP 地址的娱乐

基于Pandas列动态创建分箱,以使观测值数量或计数占总计数的1%.

如何在类中的函数(以 self 作为第一个参数)中使用递归

按字母顺序排序列表 (OrderFilter),条件是值为 '' 的条目位于列表 DRF 的末尾

如何将列表和字典逐行组合在一起

如何在Pandas 中按条件计算分组?

如何融化具有自定义名称的Pandas

通过 requests 库调用 API 获取访问令牌

日志(log)模块不适用于 Python3

获取嵌套字典的所有键

具有两个或多个返回参数的函数注释

为什么等效的 Python 代码要慢得多

将 args、kwargs 传递给 run_in_executor

无 Python 错误/错误?

python中的绝对导入是什么?