将十六进制转换为 uint16 little-endian
Convert hex to uint16 little-endian
我正在尝试将十六进制字符串列表转换为小端格式。
代码:
hex = ['1A05','1A05','1A05']
endian = int(str(hex),16)
print(endian)
但是,它不起作用并抛出错误:
ValueError: invalid literal for int() with base 16:
我期待:
[1306, 1306, 1306]
有趣的是,如果我写:
endian = int('1A05',16)
我没有收到错误 returns
6661
但这是将'1A05'
解释为big-endian的结果。我期待得到 1306 (0x051A) 作为结果。
您需要分别处理列表中的每个元素,而不是一次处理整个列表。您可以通过列表理解来做到这一点。
如果你想要 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)
我正在尝试将十六进制字符串列表转换为小端格式。
代码:
hex = ['1A05','1A05','1A05']
endian = int(str(hex),16)
print(endian)
但是,它不起作用并抛出错误:
ValueError: invalid literal for int() with base 16:
我期待:
[1306, 1306, 1306]
有趣的是,如果我写:
endian = int('1A05',16)
我没有收到错误 returns
6661
但这是将'1A05'
解释为big-endian的结果。我期待得到 1306 (0x051A) 作为结果。
您需要分别处理列表中的每个元素,而不是一次处理整个列表。您可以通过列表理解来做到这一点。
如果你想要 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)