0

いくつかのものをC#からJavaに移植していますが、.NETのBitConverterと同じように、バイトをプリミティブに変換できるクラスが必要です。

ここに投稿したばかりですが、私のコンピューターはリトルエンディアン(Intel)を使用しており、BitConverterは期待どおりに機能します。

// C# code
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);

予想通りb2short == 256。

さて、私はJAVAに「BitConverter」が必要で、このコードを見つけました。ただし、JAVAで試してみると、メソッドはバイト配列をビッグエンディアンとして解釈しているように見えます。JAVAコード:

// JAVA code
byte[] b2 = new byte[] { 0, 1 };
short b2short = MyFoundConverter.BitConverter.toShort(b2, 0);

この場合、b2short == 1であり、これはビッグエンディアンのように思えます。

このWebページにあるコードは、バイト配列をビッグエンディアンとして解釈していますか?

もしそうなら、それをリトルエンディアンにする簡単な方法はありますか?

4

2 に答える 2

1

リンク先のコードは最初のバイトを取得し、それをショートの上位バイトにしています。2 番目のバイトは short の下位バイトに入ります。したがって、これはビッグエンディアン操作です。コード化された方法では、メソッドごとに行って配列インデックスを交換する以外に、これを修正する簡単な方法はありません。これにより、最大のインデックスが最小になります。

データ型を取り、そのエンディアンを交換する別のコード ビットを見つけました。たぶん、2つを組み合わせることができます。

于 2010-01-07T21:23:18.880 に答える
0

必要なコードは次のとおりです。

byte[] b2 = new byte[] { 0, 1 };
short b2short = b2[0] | (b2[1] << 8);

int 値の場合:

byte[] b4 = new byte[] { 0, 1, 2, 3 };
int b4int = b4[0] | (b4[1] << 8) | (b4[2] << 16) | (b4[3] << 24);

あなたはアイデアを得る:-)

于 2010-01-07T21:23:08.863 に答える