私は、配列内のデータが実際に短いデータであるバイト配列を持っています。バイトは、リトルエンディアンで順序付けされる:リトルエンディアン順のバイト配列値をshort値に変換する
259、208、:短い値結果に変換
3、1、-48、0、-15、0、36、1
を241,292
バイト値を対応する短い値に変換する簡単な方法はありますか?私はすべての上位バイトを取って、それを8ビットシフトし、その下位バイトでORするループを書くことができますが、それはパフォーマンスが低下します。
私は、配列内のデータが実際に短いデータであるバイト配列を持っています。バイトは、リトルエンディアンで順序付けされる:リトルエンディアン順のバイト配列値をshort値に変換する
259、208、:短い値結果に変換
3、1、-48、0、-15、0、36、1
を241,292
バイト値を対応する短い値に変換する簡単な方法はありますか?私はすべての上位バイトを取って、それを8ビットシフトし、その下位バイトでORするループを書くことができますが、それはパフォーマンスが低下します。
java.nio.ByteBufferとすると、必要なエンディアンを指定することができます。order()。
ByteBufferのバイト、文字、getShort()、getInt()、長い、二重のようなデータを抽出するためのメソッドを持っている...
ここではそれを使用する方法の例です:
ByteBuffer bb = ByteBuffer.wrap(byteArray);
bb.order(ByteOrder.LITTLE_ENDIAN);
while(bb.hasRemaining()) {
short v = bb.getShort();
/* Do something with v... */
}
ありがとうございます。たくさん助けてくれました。誰かが簡単に問題を理解することができてうれしいです。感謝万円。 – AndroidDev
(質問のサンプルデータによると、 'getLong()'が* 2バイトを変換するとは思わないので、 'getShort()'を呼び出すことをお勧めします) –
実際には、私の結果。それでも、あなたのソリューションは正しいものです。 – AndroidDev
/* Try this: */
public static short byteArrayToShortLE(final byte[] b, final int offset)
{
short value = 0;
for (int i = 0; i < 2; i++)
{
value |= (b[i + offset] & 0x000000FF) << (i * 8);
}
return value;
}
/* if you prefer... */
public static int byteArrayToIntLE(final byte[] b, final int offset)
{
int value = 0;
for (int i = 0; i < 4; i++)
{
value |= ((int)b[i + offset] & 0x000000FF) << (i * 8);
}
return value;
}
あなたが与えてくれました8バイト、次に4ロング... 8バイトは*単一*ロング値になるはずです。また、あなたはあなたが何を期待しているかは言いませんでした。基本的にあなたの質問は現時点では非常に不明です... –
いいえ、それは不明ではありません。バイト配列のデータと変換先のデータがあります。それ以上に明白ではありません。 – AndroidDev
はい、できます。実際にあなたが「短い」、「長くはない」に変換されているように聞こえるので、あなたはあなたが*期待していることを*結果にするとは言いませんでした。質問をもっと明確にしないように気をつけてください。しかし、あなたが援助を求めていることを覚えておいてください。あなたの質問が良くなればなるほど、助けがより良くなるでしょう。 –