【发布时间】:2019-08-08 10:16:03
【问题描述】:
我正在使用 C# 中的二进制文件(旧视频游戏的 3d 模型文件)。文件格式没有正式记录,但其中一些已被游戏社区逆向工程。
我无法理解如何读取/写入 4 字节浮点值。社区成员向我提供了以下解释:
例如,字节
EE 62 ED FF表示值 -18.614。字节是小端序的。前 2 个字节代表数值的小数部分,后 2 个字节代表数值的整个部分。
对于小数部分,
62 EE转换为十进制是25326。这表示1的分数,也可以描述为65536/65536。因此,将 25326 除以 65536 得到 0.386。对于整个部分,
FF ED转换为十进制是 65517。65517 表示整数 -19(即 65517 - 65536)。这使得值 -19 + .386 = -18.614。
这个解释大部分是有道理的,但我对两件事感到困惑:
- 神奇的数字65536有什么意义吗?
-
BinaryWriter.Write(-18.613f)将字节写入79 E9 94 C1,所以我的假设是我正在使用的二进制文件使用它自己的专有方法来存储 4 字节浮点值(即我不能互换使用 C# 的float并且将需要先对值进行编码/解码)?
【问题讨论】:
-
首先不是浮点值。
-
65536=2^16... 这可能是重要的,但同时也是任意的
-
还有
25326 / 65536不是0.386
标签: c# floating-point hex byte reverse-engineering