1

我在 byte[] 中有一个字节片段。数组的总大小为 4,我想将其转换为正长数。例如,如果字节数组有四个字节 101、110、10、10000001,那么我想得到二进制序列表示的长数

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 的构造函数之一得到一个字节数组,这可能是一个非常简单的方法:

import java.math.BigInteger;

...

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

当然,您必须注意字节以二进制补码形式给出,并注意它们首先以最高有效字节给出 - 所以在您的情况下,您可能希望用另外 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 回答