为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字节数组转换为其数值(Java)?

如何将字节数组转换为其数值(Java)?

蝴蝶不菲 2019-12-21 12:52:50
我有一个8字节的数组,我想将其转换为相应的数值。例如byte[] by = new byte[8];  // the byte array is stored in 'by'// CONVERSION OPERATION// return the numeric value我想要一种可以执行上述转换操作的方法。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

假设第一个字节是最低有效字节:


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);

}

如果您有8个以上的字节,请用BigInteger替换long 。


感谢Aaron Digulla纠正了我的错误。


查看完整回答
反对 回复 2019-12-21
?
慕慕森

TA贡献1856条经验 获得超17个赞

可以使用Buffer作为java.nio软件包一部分提供的来执行转换。


在此,源byte[]数组的长度为8,这是与long值相对应的大小。


首先,将byte[]数组包装在中ByteBuffer,然后ByteBuffer.getLong调用方法以获取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注释中的方法。


尽管在这种情况下可能不适用,但是Buffer通过查看具有多个值的数组可以带来s 的魅力。


例如,如果我们有一个8字节的数组,并且希望将其视为两个int值,则可以将该byte[]数组包装为ByteBuffer,将其视为,IntBuffer然后通过IntBuffer.get以下方式获取值:


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


查看完整回答
反对 回复 2019-12-21
?
HUH函数

TA贡献1836条经验 获得超4个赞

如果这是一个8字节的数值,则可以尝试:


BigInteger n = new BigInteger(byteArray);

如果这是UTF-8字符缓冲区,则可以尝试:


BigInteger n = new BigInteger(new String(byteArray, "UTF-8"));


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 1011 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信