Python中十六进制传感器payload转bytearray及字节序转换问题
原因说明
你当前只读取了单个字节的数值,而你预期的1280是2字节无符号整数按小端序解析的结果:1280对应的十六进制为0x0500,由偏移量6的0x00(低位字节)和偏移量7的0x05(高位字节)拼接得到。
解决方法
Python提供两种常用的多字节整数解析方案:
方案1:使用int.from_bytes(更直观,适合少量字段解析)
payload_hex = "11154c1789870005bd0005bd01000200002900" # 注意不要用byte作为变量名,会覆盖Python内置类型,这里改用byte_data byte_data = bytearray.fromhex(payload_hex) decoded = {} # 取偏移6开始的2字节,按小端序解析为无符号整数 decoded["byte_7"] = int.from_bytes(byte_data[6:8], byteorder="little", signed=False) decoded["byte_8"] = byte_data[8] print(decoded) # 输出:{'byte_7': 1280, 'byte_8': 189}
方案2:使用struct模块(适合批量解析多个连续字段)
import struct payload_hex = "11154c1789870005bd0005bd01000200002900" byte_data = bytearray.fromhex(payload_hex) # 格式符说明:< 代表小端序,H 代表2字节无符号整数,B 代表1字节无符号整数 decoded_val1, decoded_val2 = struct.unpack("<H B", byte_data[6:9]) decoded = { "byte_7": decoded_val1, "byte_8": decoded_val2 } print(decoded) # 输出:{'byte_7': 1280, 'byte_8': 189}
内容的提问来源于stack exchange,提问作者Ew Na
相关产品推荐
相关产品推荐

