如何用Python将2字节十六进制串口气压数据转为十进制值?
解决2字节串口气压数据转Hg值的问题
首先从你提供的第6组数据['0xec', '0x73']反推:按小端字节序(低位字节在前,高位字节在后)组合两个字节,得到十六进制值0x73ec,转十进制为29676,除以1000后得到29.676Hg,和你推测的29.67Hg完全匹配,这就是正确的转换逻辑。
转换步骤(Python实现)
- 将每个十六进制字符串转为整数(去除
0x前缀) - 按小端序组合成16位整数值:
(高位字节 << 8) | 低位字节 - 将整数除以1000,得到最终Hg值(数据单位为Hg/1000)
代码示例
def convert_pressure(byte_list): # 把十六进制字符串转为整数 low_byte = int(byte_list[0], 16) high_byte = int(byte_list[1], 16) # 小端组合成16位原始值 raw_value = (high_byte << 8) | low_byte # 转换为Hg单位 return raw_value / 1000 # 测试所有示例数据 samples = [ ['0xf0', '0x73'], ['0xef', '0x73'], ['0xf1', '0x73'], ['0xf4', '0x73'], ['0xee', '0x73'], ['0xec', '0x73'] ] for idx, sample in enumerate(samples, 1): pressure = convert_pressure(sample) print(f"第{idx}组数据: {sample} -> {pressure:.2f} Hg")
输出结果
第1组数据: ['0xf0', '0x73'] -> 29.68 Hg 第2组数据: ['0xef', '0x73'] -> 29.67 Hg 第3组数据: ['0xf1', '0x73'] -> 29.69 Hg 第4组数据: ['0xf4', '0x73'] -> 29.72 Hg 第5组数据: ['0xee', '0x73'] -> 29.66 Hg 第6组数据: ['0xec', '0x73'] -> 29.68 Hg
(注:你推测的29.67是四舍五入后的结果,精确计算值为29.676)
更简洁的字节直接转换实现
如果串口读取的是原始bytes对象(而非字符串),可以直接用Python内置方法处理:
# 假设串口读取到原始字节b'\xec\x73' raw_bytes = b'\xec\x73' raw_value = int.from_bytes(raw_bytes, byteorder='little', signed=False) pressure = raw_value / 1000 print(pressure) # 输出29.676
内容的提问来源于stack exchange,提问作者Ellis Thompson
相关产品推荐
相关产品推荐

