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

时间:2019-03-03 23:33:16

标签: python python-3.x hex leading-zero

我需要将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个字节的间隔交换它。其代码的目的是获取十六进制字符串的浮点数。我怀疑它必须用Python删除070E前面的第一个零,而改为70E0。

  • 我已经在Stackoverflow中阅读了一些类似的问题,但是仍然无法正常工作。 我是python的新手。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用内置fromhexbytes类方法将十六进制转换为字节,然后解压缩它们,但是您可以:

>>> 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)

这仅在要解压缩的字节数可被目标数据类型的字节数均分的情况下有效。如果不是这种情况(例如,如果您正在从套接字读取流),则必须累积数据,直到拥有合适的数量为止。