10

私がする必要があるのは、符号なし2バイト配列を整数に変換することだけです。Javaには符号なしデータ型がないことはわかっていますが、私の数値は符号なしバイトのふりをしています。

byte[] b = {(byte)0x88, (byte)0xb8}; // aka 35000
int i = (byte)b[0] << 8 | (byte)b[1];

問題は、それらが符号付きバイトであると見なされるため、正しく変換されないことです...どうすればintに戻すことができますか?

4

2 に答える 2

22

Java、bytes、intsなどに符号なしの数値はありません。バイトがビットシフトされるint前に変換されると、符号拡張されます。つまり、0x88=>0xFFFFFF88です。不要なものを隠す必要があります。

これを試して

int i = ((b[0] << 8) & 0x0000ff00) | (b[1] & 0x000000ff);

そしてあなたは35000を得るでしょう。

于 2013-03-22T00:24:46.477 に答える
7

使用できます

int i = ((b[0] & 0xFF) << 8) | (b[1] & 0xFF);

また

int i = ByteBuffer.wrap(b).getChar();

また

int i = ByteBuffer.wrap(b).getShort() & 0xFFFF;
于 2013-03-22T02:26:21.220 に答える