我试图弄清楚我的游戏(极品飞车:高额桌)是如何将玩家的钱从存储在文件中的十六进制值转换为玩家在启动游戏时看到的十进制值。
查看周围的数据,
0x30 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 8B 46
0x40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
我已经能够找到存储在偏移3E和3F的影响值,但它们如何被视为十六进制值并变成常规十进制值对我来说是一个谜。
在使用十六进制值一段时间之后,我能够找到一种模式:
Hex Decimal
7B 46 16120
8B 46 17904
9B 46 19952
AB 46 22000
有趣的是,AB,9B和8B十进制值之间的差异是2048(嗯,2的幂......),但是,当我以为我已经开始破解它时,我发现了差异在8B和7B之间是1784 ......
任何人都可以看到这里的模式是什么吗?我错过了什么吗?
答案 0 :(得分:2)
事实证明,没有任何反向工程......我只是不明白不同的数据类型是如何工作的:)货币价值实际上是存储为浮点而不是int。
我将从文件中获取一个示例值:
0x3C 00 38 7C 46
如果您反转字节(读取467C3800),然后将其插入任何在线计算器,您将获得16142.0的合理值,这正是我所寻找的样本值。
在this website处很好地描述了将浮点数存储为十六进制值以及IEEE-754规范的整个过程。
我希望这可以帮助别人!