python 中带符号的十六进制短符号的带符号十进制

Signed decimal from a signed hex short in python

我想知道是否有任何简单快捷的方法来获取 python 中有符号十六进制的十进制值。

我检查十六进制代码值的方法是在终端中打开 python 并输入十六进制,它 return 是这样的小数:

>>>0x0024
36
>>>0xcafe
51966

所以我想知道,有什么方法可以对带符号的短十六进制执行此操作吗?例如 0xfffc 应该 return -4

如果您可以使用 NumPy 数值类型,您可以使用 np.int16 类型转换

>>> import numpy as np
>>> np.int16(0x0024)
36
>>> np.int16(0xcafe)
-13570
>>> np.int16(0xfffc)
-4
>>> np.uint16(0xfffc)
65532
>>> np.uint16(0xcafe)
51966

Python 语言指定了整数的统一表示,numbers.Integral class,numbers.Rational 的子类型。在Python3中,对该类型的范围没有具体的限制。在 Python 2 中只指定了最小范围,即 numbers.Integral 应该至少有 -2147483648 到 2147483647 的范围,对应于 32 位表示。

NumPy 实现更接近机器架构。为了有效地实现数值运算,它提供了 fixed width datatypes,例如 int8int16int32int64

您可以使用 int 类方法 from_bytes 并为其提供字节:

>>> int.from_bytes(b'\xfc\xff', signed=True, byteorder='little')
-4
import ctypes

def hex2dec(v):
    return ctypes.c_int16(v).value

print hex2dec(0xfffc)
print hex2dec(0x0024)
print hex2dec(0xcafe)