此十六进制数据是否存在有意义的非 hex2dec 数字的模式?

Is there a pattern to this hex data where meaningful, non-hex2dec numbers do exist?

我正在尝试对一个旧的传感器接口程序 (Draeger Pac III) 进行逆向工程。我在传感器屏幕上报告了有意义的值,并通过串行端口嗅探器识别了原始十六进制数据。现在我正试图弄清楚编写一些代码以在 arduino 上以实数接收和传输数据的模式。

编辑更新: 到目前为止 this link 另一个更新的 Draeger 模块是唯一可能的 link 可用但无助于解释下面计数方案背后的含义。

我 100% 确定这些字节是感兴趣的字节。例如,这是来自读数的一个值的原始数据:01 02 01 05 b0 00 19 00 d2 01 02 01 1d b0 00 00 43 9d 80 00 00 3e cc cc cd 42 5c 00 00 01 01 01 01 02 00 00 04 02 01 01 05 80。前 8 个字节是第 9 个位置带有校验和的命令。直到并包括第 21 个字节,每个值的变化都没有变化,我只能假设这些对应于其他状态组件。 3e cc cc cd 一些如何表示 0.40。 42 5c 00 00 表示 55(仍然不确定如何)。下一部分表示其他组件的 on/off 并且可以独立于表示数字的两个 4 字节数据集进行更改。最后 2 个字节是校验和。

Real #  Byte 1  Byte 2  Byte 3  Byte 4
0.00    0   0   0   0
0.01    3c  23  d7  0a
0.02    3c  a3  d7  0a
0.03    3c  f5  c2  8f
0.04    3d  23  d7  0a
0.05    3d  4c  cc  cd
0.06    3d  75  c2  8f
0.07    3d  8f  5c  29
0.08    3d  a3  d7  0a
0.09    3d  b8  51  ec
0.10    3d  cc  cc  cd
0.20    3e  4c  cc  cd
0.30    3e  99  99  9a
0.40    3e  cc  cc  cd
0.50    3f  0   0   0
0.99    3f  7d  70  a4
1.00    3f  80  0   0
1.01    3f  81  47  ae
2.00    40  0   0   0
3.00    40  40  0   0
4.00    40  80  0   0
4.10    40  83  33  33
4.11    40  83  85  1f
5.00    40  a0  0   0
8.14    41  2   3d  71
10.00   41  20  0   0
19.00   41  98  0   0
20.00   41  a0  0   0
21.00   41  a8  0   0
30.00   41  f0  0   0
31.00   41  f8  0   0
31.51   41  fc  14  7b
32.00   42  0   0   0
33.00   42  4   0   0
34.00   42  8   0   0
39.00   42  1c  0   0
40.00   42  20  0   0
41.00   42  24  0   0
65.00   42  82  0   0
70.00   42  8c  0   0
80.00   42  a0  0   0
95.00   42  be  0   0
100.00  42  c8  0   0

此数据的模式是什么?

答案在 IEEE-754 浮点转换器中。这让我得到了我想要的所有结果。

https://www.h-schmidt.net/FloatConverter/IEEE754.html

为了便于在 python3 中将十六进制转换为十进制:

import struct 

input='3f   81  47  ae'

val=struct.unpack('!f', bytes.fromhex(input))[0]
print (round(val,2))