繁体   English   中英

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

[英]Convert hex to uint16 little-endian

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

代码:

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

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

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

我期待:

[1306, 1306, 1306]

有趣的是,如果我写:

endian = int('1A05',16)

我没有收到错误,它返回

6661

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

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

如果您想要 little-endian,则必须在将其解析为 integer 之前交换字符串的一半:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM