如何将字节数组转换为其数值(Java)?
我有一个8字节的数组,我想将其转换为相应的数值。
例如:
byte[] by = new byte[8]; // the byte array is stored in 'by'
// CONVERSION OPERATION
// return the numeric value
我想要一个将执行上述转换操作的方法。
我有一个8字节的数组,我想将其转换为相应的数值。
例如:
byte[] by = new byte[8]; // the byte array is stored in 'by'
// CONVERSION OPERATION
// return the numeric value
我想要一个将执行上述转换操作的方法。
可以使用作为java.nio
包的一部分提供的缓冲区
来执行转换。
此处,源数组的长度为 8,即与值相对应的大小。byte[]
long
首先,将数组包装在 ByteBuffer
中,然后调用 ByteBuffer.getLong
方法来获取值:byte[]
long
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();
System.out.println(l);
结果
4
我要感谢dfa在评论中指出了该方法。ByteBuffer.getLong
虽然它可能不适用于这种情况,但 s 的美妙之处在于查看具有多个值的数组。Buffer
例如,如果我们有一个 8 字节的数组,并且我们想将其视为两个值,我们可以将数组包装在一个 中,该数组被视为 IntBuffer
,并通过 IntBuffer.get
获取值:int
byte[]
ByteBuffer
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 1, 0, 0, 0, 4});
IntBuffer ib = bb.asIntBuffer();
int i0 = ib.get(0);
int i1 = ib.get(1);
System.out.println(i0);
System.out.println(i1);
结果:
1
4
假设第一个字节是最低有效字节:
long value = 0;
for (int i = 0; i < by.length; i++)
{
value += ((long) by[i] & 0xffL) << (8 * i);
}
第一个字节是最重要的,那么它就有点不同了:
long value = 0;
for (int i = 0; i < by.length; i++)
{
value = (value << 8) + (by[i] & 0xff);
}
将 long 替换为 BigInteger,如果字节数超过 8 个。
感谢Aaron Digulla纠正我的错误。