从 HEX 字符串转换为 int 而不删除 Python 上的前导零

Converting from HEX string to int without removing leading zeroes on Python

我需要有关将 HEX 字符串转换为 int 的帮助。我有一个大数据输入,但是, 这是数据中的一个示例:

def convert_hex_to_int(n:int, interval:int):
        splitted = [hex(n)[2:][i:i + interval] for i in range(0, len(hex(n)[2:]), interval)]
        return [float(int(hex(unpack('<H', pack('>H', int(i, 16)))[0]), 16)) for i in splitted]

    a='0x0E070907'
hex_int = int(a, 16)
result_print = (convert_hex_to_int(hex_int, 4))

和 而不是

[1806.0, 1801.0]

结果是

[28896.0, 1801.0]

函数convert_hex_to_int是将字符串分割成2个字节并交换,间隔4个字节。代码的目的是获取 HEX String 的浮点数。我怀疑它必须执行 Python 删除 070E 前面的第一个零,相反,它变成了 70E0。

您可以使用 fromhex classmethod of the bytes 内置函数将十六进制转换为字节,然后按您喜欢的方式解压它们:

>>> a='0x0E070907'
>>> h = bytes.fromhex(a[2:])
>>> h
b'\x0e\x07\t\x07'
>>> struct.unpack('<2H', h)
(1806, 1801)

如果您事先不知道字节数,您可以生成一个格式字符串来匹配您的数据。

>>> a='0x9406920691068F06'
>>> bs = bytes.fromhex(a[2:])
>>> bs
b'\x94\x06\x92\x06\x91\x06\x8f\x06'
>>> len(bs)
8
>>> # Each 'H' is 2 bytes, multiply 'H' by half
>>> # the number of bytes to gt the format string.
>>> fmt = '<' + ('H' * (len(bs)//2))
>>> struct.unpack(fmt, bs)
(1684, 1682, 1681, 1679)

这仅在要解包的字节数可以被目标数据类型的字节数整除时才有效。如果不是这种情况 - 例如,如果您正在从套接字读取流 - 那么您将不得不积累数据,直到获得合适的数量。