逆向工程定点数

Reverse Engineering Fixed Point Numbers

我目前正在给另一辆车装一个引擎,我想保持板式计算机内的燃油经济性计算正常工作。我设法成功地重新编码了这部分,但我一直试图弄清楚他们使用的(简单的?)双字节数据格式但没有成功。我假设它是定点符号,但无论我如何移动它,它都不对齐。两个字节如何表示正确的数字?

Some examples:

Bytes (Dec) --> Result
174,10 -> 2,67 
92,11  -> 2,84
128,22 -> 3,75
25,29  -> 4,85
225,23 -> 3,98 
00,40  -> 5,00 
128,34 -> 5,75

这是部分解决方案:

首先,交换字节。然后加入他们:

结果(十六进制)是:

0AAE
0B5C
1680
1D19
17E1
2800
2280

然后拆分为第一个数字(4位),其余三个数字(12位)并保留整个数字(16位)。结果(十进制)是:

0  2734   2734
0  2908   2908
1  1664   5760
1  3353   7449
1  2017   6113
2  2048  10240
2   640   8832

第一位数字好像是乘数。 0代表1024,1代表1536,2代表2048。公式可能是f = (1024 + n * 512).

现在用整数除以乘数。四舍五入到小数点后两位的结果是:

 2734 / 1024 =  2.67
 2908 / 1024 =  2.84
 5760 / 1536 =  3.75
 7449 / 1536 =  4.85
 6113 / 1536 =  3.98
10240 / 2048 =  5.00
 8832 / 2048 =  4.31

它适用于除最后一个数字以外的所有数字,它可能包含错误。

所以它似乎是某种浮点数,但我不认识具体格式。可能有一个更简单的公式来解释这个数字。