将十六进制转换为uint16 little-endian

时间:2020-06-22 19:31:14

标签: python hex endianness

我正在尝试将十六进制字符串列表转换为小尾数格式。

代码:

hex = ['1A05','1A05','1A05'] 
endian = int(str(hex),16)
print(endian)

但是,它不起作用并引发错误:

ValueError:以16为基数的int()的无效文字

我期望:

[1306, 1306, 1306]

有趣的是,我写:

endian = int('1A05',16)

我没有收到错误,它会返回

6661

但这是将'1A05'解释为大端的结果。我原本希望得到1306(0x051A)。

1 个答案:

答案 0 :(得分:1)

您需要分别处理列表的每个元素,而不是一次处理整个列表。您可以通过列表理解来做到这一点。

如果要使用little-endian,则必须先将字符串的两半交换为整数:

hex = ['1A05','1A05','1A05'] 
endian = [int(h[2:4] + h[0:2], 16) for h in hex]

但是,仅在十六进制字符串始终为4个字符的情况下才有效。您还可以在解析后使用位操作交换整数的字节:

for h in hex:
    i = int(h, 16)
    i = i & 0xff << 16 | i & 0xff00 >> 16
    endian.append(i)
相关问题