0

我正在编写一个二进制阅读器,它需要读取由 Android 平板电脑编写的一组非常特定的二进制文件。我在阅读这个二进制文件时遇到了几个问题,首先是它与我最初编写的数据不同。我已经阅读了一些关于字节序、单词以及它们是如何在不同系统上制作的内容,我很好奇这是否是问题的根源。在这一点上任何信息都会很好,但我想知道的具体事情是:考虑到下面的行,为什么二进制文件没有被读入与写出的值相同的值?我怎样才能解决这个问题?

说 numPoints = 5000。

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

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

我正在使用 Windows 8.1 x64 和 Google-Project-Tango 平板电脑。

4

1 回答 1

0

您的 C++ 代码可能正在以 little-endian 格式读取数字。Java(至少是 DataOutputStream)将二进制数写入大端。

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

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

您还应该检查 UE4 是否保证二进制文件是 little-endian,或者它是否是机器的本机 endianness - 否则您可能希望将游戏移植到 big-endian 平台并在以后遇到问题。

于 2015-02-14T00:03:04.567 回答