从 2-Byte hex 中获取小数

问题描述 投票:0回答:1

我有一个问题,我们将大气压力 (Hg/1000) 作为 2 字节给出。数据来自串行读数,我们获得了以下相关信息:

  • 8 个数据位
  • 1 起始位
  • 1 停止位
  • 无平价

我正在尝试将字节转换为 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
有关,但我不确定。

python hex data-conversion
1个回答
1
投票

数据看起来像是以“

little endian
”格式打包为int16值。

您可以使用 int.from_bytesstruct.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
© www.soinside.com 2019 - 2024. All rights reserved.