【发布时间】:2018-08-04 21:39:02
【问题描述】:
我想知道是否有任何简单快捷的方法可以在 python 中获取带符号的十六进制的十进制值。
我检查十六进制代码的值只是在终端中打开 python 并输入十六进制,它会返回如下十进制:
>>>0x0024
36
>>>0xcafe
51966
所以我想知道,有没有什么办法可以为带符号的短十六进制做到这一点?例如 0xfffc 应该返回 -4
【问题讨论】:
我想知道是否有任何简单快捷的方法可以在 python 中获取带符号的十六进制的十进制值。
我检查十六进制代码的值只是在终端中打开 python 并输入十六进制,它会返回如下十进制:
>>>0x0024
36
>>>0xcafe
51966
所以我想知道,有没有什么办法可以为带符号的短十六进制做到这一点?例如 0xfffc 应该返回 -4
【问题讨论】:
import ctypes
def hex2dec(v):
return ctypes.c_int16(v).value
print hex2dec(0xfffc)
print hex2dec(0x0024)
print hex2dec(0xcafe)
【讨论】:
您可以使用int 类方法from_bytes 并为其提供字节:
>>> int.from_bytes(b'\xfc\xff', signed=True, byteorder='little')
-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 类,numbers.Rational 的子类型。在 Python 3 中,对这种类型的范围没有特定的限制。在 Python 2 中,仅指定了最小范围,即numbers.Integral 应至少具有 -2147483648 到 2147483647 的范围,这对应于 32 位表示。
NumPy 实现更接近机器架构。为了有效地实现数字运算,它提供了fixed width datatypes,例如int8、int16、int32和int64。
【讨论】: