逆向工程温度(RS485 总线)

逆向工程 解密
2021-06-12 09:22:45

我有以下十六进制字节数据。有人可以帮我逆向工程温度计算吗?

ID
||
81 00 8c 00 
82 00 aa 00 
83 00 04 01 
84 00 ff 00 
85 00 21 04 

第一个字节是id!81-84=1-4

其中一个数据是 14,0 C°,另一个是 17,0 C°。

我的尝试:-(
第二个字节 * 10)+(第三个字节 *10/256)
-(第二个字节 - 0x80)/ 2
-(第二个字节/ 2)- 0x80
- 第二个字节 * 100
-(第二个字节/ 2)- 20

1个回答

我猜这是原始(未编码)数据,每一行都由两个以小端顺序存储的 16 位整数组成。这意味着

temperature = (float)(b[3] << 8 + b[2]) / 10;

其中b[2]是第三个字节,b[3]是第四个字节

因此,使用上述公式,数据将产生以下温度:

81 00 8c 00; #Measurement 0x0081 - 14.0
82 00 aa 00; #Measurement 0x0082 - 17.0
83 00 04 01; #Measurement 0x0083 - 26.0
84 00 ff 00; #Measurement 0x0084 - 25.5
85 00 21 04; #Measurement 0x0085 - 105.7

更新:

这是一个 Python 片段,它在给定带有空格分隔的十六进制值的字符串的情况下进行转换:

input = "81 00 8c 00"
byte_arr = input.split(" ")

for i in range(len(byte_arr)):
    byte_arr[i] = int(byte_arr[i], 16)

measurement_id = byte_arr[1] << 8 | byte_arr[0]
temperature = (byte_arr[3] << 8 | byte_arr[2]) / 10.0

print("Measurement: %d" % measurement_id)
print("Temperature: %.2f C°" % temperature)