逆向工程定点数

Rob*_* K. 1 embedded point fixed notation

我目前正在将发动机安装到另一辆车上,我希望保持车载电脑内的燃油经济性计算正常工作。我成功地重新编码了这部分,但我一直试图找出他们使用的(简单?)两字节数据格式,但没有成功。我认为它是定点表示法,但无论我如何移动它,它都不会对齐。这两个字节如何表示正确的数字?

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
Run Code Online (Sandbox Code Playgroud)

Cod*_*odo 5

这是部分解决方案:

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

结果(十六进制)是:

0AAE
0B5C
1680
1D19
17E1
2800
2280
Run Code Online (Sandbox Code Playgroud)

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

0  2734   2734
0  2908   2908
1  1664   5760
1  3353   7449
1  2017   6113
2  2048  10240
2   640   8832
Run Code Online (Sandbox Code Playgroud)

第一个数字似乎是一个乘法因子。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
Run Code Online (Sandbox Code Playgroud)

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

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