从Android Java读取二进制错误UE4-C++

Binary writing from Android-Java reading wrong from UE4-C++

本文关键字:错误 UE4-C++ 二进制 读取 Android Java      更新时间:2023-10-16

我正在编写一个二进制阅读器,它需要读取安卓平板电脑编写的一组非常特定的二进制文件。我在阅读这个二进制文件时遇到了几个问题,首先也是最重要的是,它与我最初写的数据不相似。我读过一些关于endianness、words以及它们是如何在不同系统上生成的,我很好奇这是否是问题的根源。在这一点上,任何信息都是好的,但我想知道的具体情况是:考虑到下面的行,为什么二进制文件的读取值与写入值不同?我该怎么解决这个问题?

假设numPoints=5000。

(OUT FUNCTION-Android java)
out.writeInt(numPoints);
(功能-UE4-c++)
reader << numPoints;

numPoints现在等于一个我无法解释的非常大的数字。

我使用的是Windows 8.1 x64和谷歌项目探戈平板电脑。

您的C++代码可能正在读取小端序中的数字。Java(至少DataOutputStream)将二进制数写为big-endian。

在Java端修复这个问题可能更简单,因为它有一个内置函数:

out.writeInt(Integer.reverseBytes(numPoints));

你还应该检查UE4是否保证二进制文件是小端序,或者它是否是机器的原生端序——否则你可能想将游戏移植到大端序平台,然后遇到问题。