前言:
我目前正在尝试解密一种旧的二进制格式(在 1980 年代中后期在日本开发),该格式将浮点值存储在 4 字节 block 中,不使用 IEEE754 标准进行转换。我有一个程序可以为我转换这些值,因此我可以操纵二进制文件来更改存储的值并查看结果,但我不知道如何解释它们。
我确实将 4 个字节的所有可能排列解释为 IEEE float ,但没有一个是正确的,所以我可以说这不是字节顺序问题,也不是我知道或可以在互联网上找到的 float 表示.
我已经尝试研究我使用的程序的汇编,但我的汇编技能还不够好,无法从中得到任何东西。
这里有一些例子:
- A0 78 2D 00 = 298。
- A0 78 2D 01 = 1975.7
- A0 78 2D 02 = 3653.4
- A0 78 2C 00 = 291.4
- A0 78 2C 02 = 3646.8
实际问题:
是否有任何其他(旧的)32 位浮点表示在 IEEE754 标准之外/之前使用过?
最佳答案
它不是浮点表示,而是定点表示。二进制 4 字节 block 是小端 32 位整数,表示乘以 10000 的 float 值:
Byte repr. int hexa int dec. int val / 10000.
A0 78 2D 00 0x002d78a0 2980000 298.0
A0 78 2D 01 0x012d78a0 19757216 1975.7216
A0 78 2D 02 0x022d78a0 36534432 3653.4432
A0 78 2C 00 0x002c78a0 2914464 291.4464
A0 78 2C 02 0x022c78a0 36468896 3646.8896
这通常用于在精度固定时表示小数以及当您需要精确操作时,例如表示货币
关于floating-point - 除了 IEEE 754 之外是否还有任何 32 位浮点表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50508607/