ビッグエンディアンのビットマスク
-
16-10-2019 - |
質問
これは正気のチェックであるほど質問ではありません!
Big EndianのビットマスクとしてJavaに4バイトを読む必要があり、それらのバイトは次のとおりです。
0x00、0x01、0xb6、0x02。
それをintにすることは次のとおりです:112130
バイナリは、00000000000000000000000000011010011000000010になります
一連のバイトのエンディアンは、ビット位置に影響しませんか?
ありがとう
トニー
解決
エンディアン性は、バイトの順序を反映していますが、それらのバイト内のビットの順序は反映されていません。
(2バイトの)単語0x9001を表現したいとしましょう。これをバイナリで入力するだけの場合、それは1001000000000001になります。
ビッグエンディアンのマシンにバイト(下位のアドレスから高へ)をダンプすると、表示されます。 10010000 00000001
.
小さなエンディアンマシンにバイト(下位のアドレスから高へ)をダンプすると、表示されます。 00000001 10010000
.
他のヒント
一般的に、あなたが読んでいるものがあなたに全体のバイトを与えている場合、あなたはそれらのバイトを構成するビットの順序について心配する必要はありません:あなたが正しく仮定するのは重要なのは重要なのはバイトの順序です。
個々のビットの「エンディアンネス」を心配しなければならないかもしれない時間は、バイト全体ではなくビットのストリームを実際に読み込む/書くことです(たとえば、ビットレベルで動作する圧縮アルゴリズムを書いている場合、あなたはあなたがdビットを書き込む順序について決定する必要があります)。
あなたが注意を払わなければならない唯一のことは、あなたが正確に「4バイトをJavaに読む」ことです - それはエンディアンネスが重要であり、あなたはそれを台無しにすることができます(あなたはそれを台無しにすることができますDataInputStream
ビッグエンディアンを想定しています)。読んだ値がINT 112130になったら、設定されます。