2

我将十六进制转换为十进制,但结果是大端,我需要小端(例如 1500 = 21,而不是我得到的 5376)。我尝试使用 struct 函数,但遇到了一些问题:

u16ModuleID_hex = str(f3.read(4))
ba = bytearray.fromhex(u16ModuleID_hex)
ba.reverse()
u16ModuleID_dec = struct.unpack("<h", ba)

错误:在位置 1 的 fromhex() arg 中找到非十六进制数 所以,我添加了:ba = bytearray.fromhex(u16ModuleID_hex[0][2:]) 错误:struct.error: unpack requires a buffer of 2 bytes

u16ModuleID_hex 是例如 b'10b5'。我假设它的前面有 b' 和整体数据类型。

4

2 回答 2

2

需要小端(例如,我得到的 1500 = 21 而不是 5376)

看看int.frombytes(需要python3.2或更新)

data = b'\x15\x00'
print(int.from_bytes(data, "big"))
print(int.from_bytes(data, "little"))

输出

5376
21
于 2021-10-08T08:56:38.417 回答
1

Just.pack().unpack()您的数据翻转字节序:

import struct

a = 0x1500

print(a)
# --> 5376

b, = struct.unpack("<h", struct.pack(">h", a))
print(b)
# --> 21
于 2021-10-08T08:55:34.507 回答