2010-12-20 10 views
15

2バイト配列(byte [2])をJavaの整数値に変換する必要があります。どうやってやるの?Java:バイトを整数に変換する

+5

この質問には説明がいくつかあります。今のところ、あなたが選択した答えによって何を意味するのかだけがわかります。 –

答えて

24

あなたはこのためにByteBufferを使用することができます。

ByteBuffer buffer = ByteBuffer.wrap(myArray); 
buffer.order(ByteOrder.LITTLE_ENDIAN); // if you want little-endian 
int result = buffer.getShort(); 

Convert 4 bytes to int参照してください。

+5

+1 ByteBufferソリューション – Casey

+0

ありがとうございました。 ByteBufferは符号付きバイトと符号なしバイトを処理しますか? – keshav

+0

@keshav:どういう意味ですか? "signed"または "unsigned"のようなものはありません。バイトは単に「0」と「1」のグループです。 ** only **の意味はあなたがそれらの数字をどのように解釈するかにあります。 –

3

まあ、各バイトは-128.1.127の整数なので、整数のペアを1つの整数にマッピングする方法が必要です。これを行うには、バイトのペアでエンコードした内容に応じて、さまざまな方法があります。最も一般的なのは、16ビット符号付き整数をバイトのペアとして格納することです。

(byte_array[0]<<8) + (byte_array[1] & 0xff) 

またはリトルエンディアン:整数にその背中を変換すると、あなたがそれを保存するかどうかビッグエンディアン形式に依存

Javaでは
(byte_array[1]<<8) + (byte_array[0] & 0xff) 
10

、バイトはバイトの値が負になることを意味している、署名されていますそれが起こると、@ MattBallのオリジナルの解決策は機能しません。バイト配列のバイナリ形式は、このようにしている場合

例えば、:

1000年1101年1000年1101はその後myarrayの[0] 1000 1101とmyarrayの[1] 1000 1101であり、バイト1000 1101の10進値は-115代わりに141である(= 2^7 + 2^3 + 2^2 + 2^0)我々が使用している場合

int result = (myArray[0] << 8) + myArray[1]

値は-16191です。これは誤っています。

その間違ったが、翻訳するときので、私たちは符号なし整数に署名バイトをマッピングする必要があり、我々は整数に2バイトの配列を解釈する際に、すべてのバイトが符号なし であることを理由:

((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)

結果は36237です。電卓またはByteBufferを使用して正しいかどうかを確認します。また

+0

説明のために多くの感謝:) – shadygoneinsane

3

、あなたはグアバライブラリを使用することができた場合:

Ints.fromByteArray(0, 0, myArray[1], myArray[0]); 

プロジェクトの多くは、とにかくそれを使用するので、それは言及する価値がありました。

3

は、単純に次の操作を行います。

return new BigInteger(byte[] yourByteArray).intValue(); 

等符号なし変換対署名を心配する必要はありませんBluetoothのコマンド変換に素晴らしい作品。