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++ コードは、おそらくリトル エンディアンで数値を読み取っています。Java (少なくとも DataOutputStream) は 2 進数をビッグエンディアンとして書き込みます。

組み込み関数があるため、Java 側でこれを修正する方がおそらく簡単です。

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

また、バイナリ ファイルがリトル エンディアンであることを UE4 が保証しているかどうか、またはそれがマシンのネイティブ エンディアンであることを確認する必要があります。そうしないと、ゲームをビッグ エンディアン プラットフォームに移植して、後で問題が発生する可能性があります。

于 2015-02-14T00:03:04.567 に答える