我有一个问题,我们将大气压力 (Hg/1000) 作为 2 字节给出。数据来自串行读数,我们获得了以下相关信息:
我正在尝试将字节转换为 python 中的有效压力读数(20 到 32.5 之间),来自以下示例数据:
1. ['0xf0', '0x73']
2. ['0xef', '0x73']
3. ['0xf1', '0x73']
4. ['0xf4', '0x73']
5. ['0xee', '0x73']
6. ['0xec', '0x73']
到目前为止,我已经能够通过转换为十进制并添加它们来获得数字 6 或
351
的值236,115
,尽管我不确定从这里去哪里。我相信这应该与29.67Hg
有关,但我不确定。
数据看起来像是以“
little endian”格式打包为
int16
值。
您可以使用 int.from_bytes 或 struct.unpack
解压缩这些值查看您期望的值,转换的输出需要除以 1000 才能将小数位移动到正确的位置。
由于输入数据中的值是字符串,您需要先将它们转换为整数。因为它们代表十六进制值,所以这可以用
int('0xce', 16)
来完成。
有很多方法可以做到这一点。下面是一个例子:
data = [['0xf0', '0x73'],
['0xef', '0x73'],
['0xf1', '0x73'],
['0xf4', '0x73'],
['0xee', '0x73'],
['0xec', '0x73']]
for idx, reading in enumerate(data):
value = int.from_bytes([int(x, 16) for x in reading], 'little') / 1000
print(f"{idx}. {reading} is {value:0.03f}")
给出以下输出:
0. ['0xf0', '0x73'] is 29.680
1. ['0xef', '0x73'] is 29.679
2. ['0xf1', '0x73'] is 29.681
3. ['0xf4', '0x73'] is 29.684
4. ['0xee', '0x73'] is 29.678
5. ['0xec', '0x73'] is 29.676