2バイト配列(byte [2])をJavaの整数値に変換する必要があります。どうやってやるの?Java:バイトを整数に変換する
答えて
あなたはこのために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参照してください。
まあ、各バイトは-128.1.127の整数なので、整数のペアを1つの整数にマッピングする方法が必要です。これを行うには、バイトのペアでエンコードした内容に応じて、さまざまな方法があります。最も一般的なのは、16ビット符号付き整数をバイトのペアとして格納することです。
(byte_array[0]<<8) + (byte_array[1] & 0xff)
またはリトルエンディアン:整数にその背中を変換すると、あなたがそれを保存するかどうかビッグエンディアン形式に依存
Javaでは(byte_array[1]<<8) + (byte_array[0] & 0xff)
、バイトはバイトの値が負になることを意味している、署名されていますそれが起こると、@ 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を使用して正しいかどうかを確認します。また
説明のために多くの感謝:) – shadygoneinsane
、あなたはグアバライブラリを使用することができた場合:
Ints.fromByteArray(0, 0, myArray[1], myArray[0]);
プロジェクトの多くは、とにかくそれを使用するので、それは言及する価値がありました。
は、単純に次の操作を行います。
return new BigInteger(byte[] yourByteArray).intValue();
等符号なし変換対署名を心配する必要はありませんBluetoothのコマンド変換に素晴らしい作品。
この質問には説明がいくつかあります。今のところ、あなたが選択した答えによって何を意味するのかだけがわかります。 –