此十六进制数据是否存在有意义的非 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))
我正在尝试对一个旧的传感器接口程序 (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))