逆向工程定点数
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
它适用于除最后一个数字以外的所有数字,它可能包含错误。
所以它似乎是某种浮点数,但我不认识具体格式。可能有一个更简单的公式来解释这个数字。
我目前正在给另一辆车装一个引擎,我想保持板式计算机内的燃油经济性计算正常工作。我设法成功地重新编码了这部分,但我一直试图弄清楚他们使用的(简单的?)双字节数据格式但没有成功。我假设它是定点符号,但无论我如何移动它,它都不对齐。两个字节如何表示正确的数字?
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
它适用于除最后一个数字以外的所有数字,它可能包含错误。
所以它似乎是某种浮点数,但我不认识具体格式。可能有一个更简单的公式来解释这个数字。