1

byte[] にバイトのフラグメントがあります。配列の合計サイズは 4 で、これを正の long 数に変換したいと考えています。たとえば、バイト配列に 101、110、10、10000001 の 4 バイトがある場合、バイナリ シーケンスで表される長い数値を取得したい

00000000 00000000 00000000 00000000 00000101 00000110 00000010 10000001

これは 84279937 に等しい

Javaでそれを行う効率的な方法は何ですか?

4

3 に答える 3

4

リトルエンディアンだとすると、

(b[0] & 0xFF) | (b[1] & 0xFF) << 8 | (b[2] & 0xFF) << 16 | (b[3] & 0xFF) << 24

例、http://www.ideone.com/p68zS

& 0xFF符号付きバイトを符号なしに変換するためにあります...

于 2010-05-29T17:42:53.973 に答える
2

効率についてはわかりませんが、BigInteger のコンストラクターの 1 つがバイト配列を取得するため、これは非常に簡単な方法である可能性があります。

import java.math.BigInteger;

...

long value = new BigInteger(myByteArray).longValue();

もちろん、バイトが 2 の補数で指定されていることに注意し、最初に最上位バイトで指定されていることに注意する必要があります。そのため、この場合、おそらく配列の先頭に別の 4 つの空のバイトを埋め込む必要があります。

于 2010-05-29T17:51:27.320 に答える
2
ByteBuffer buf = ByteBuffer.allocate(8); 
buf.put(4, b[0]).put(5, b[1]).put(6, b[2]).put(7, b[3]);
long longVal = buf.getLong();
于 2010-05-29T18:02:44.860 に答える