我在 byte[] 中有一个字节片段。数组的总大小为 4,我想将其转换为正长数。例如,如果字节数组有四个字节 101、110、10、10000001,那么我想得到二进制序列表示的长数
00000000 00000000 00000000 00000000 00000101 00000110 00000010 10000001
等于 84279937
在 Java 中做到这一点的有效方法是什么?
我在 byte[] 中有一个字节片段。数组的总大小为 4,我想将其转换为正长数。例如,如果字节数组有四个字节 101、110、10、10000001,那么我想得到二进制序列表示的长数
00000000 00000000 00000000 00000000 00000101 00000110 00000010 10000001
等于 84279937
在 Java 中做到这一点的有效方法是什么?
假设小端,
(b[0] & 0xFF) | (b[1] & 0xFF) << 8 | (b[2] & 0xFF) << 16 | (b[3] & 0xFF) << 24
例如,http://www.ideone.com/p68zS
那里可以将& 0xFF
带符号的字节转换为无符号的......
不知道效率,但由于BigInteger 的构造函数之一得到一个字节数组,这可能是一个非常简单的方法:
import java.math.BigInteger;
...
long value = new BigInteger(myByteArray).longValue();
当然,您必须注意字节以二进制补码形式给出,并注意它们首先以最高有效字节给出 - 所以在您的情况下,您可能希望用另外 4 个空字节填充数组的开头。
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();