jio0103 2013-11-12 07:29 采纳率: 0%
浏览 798

请问下为什么最后的结果是这个值

public static Long bytes2long(byte[] b, int index) {
ByteBuffer buffer = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN);
buffer.put(b, index, 8);
return buffer.getLong(0);
}

public static void main(String[] args) {
String text = "11111111";
byte[] bytes = text.getBytes(Charset.forName("utf-8"));
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
long result = bytes2long(bytes,0);
System.out.println(result);
}

result;3544668469065756977

  • 写回答

1条回答

  • Jackchen随心 2024-03-14 16:19
    关注

    最后的结果是3544668469065756977,是因为在bytes2long方法中使用了ByteBuffer来将字节数组转换为long类型。在这个方法中,字节数组被放入ByteBuffer中,并且使用LITTLE_ENDIAN字节顺序进行存储。然后,使用buffer.getLong(0)方法从ByteBuffer中获取long类型的值。

    在main方法中,将字符串"11111111"转换为字节数组,并将该字节数组传递给bytes2long方法进行转换。由于字节数组的长度为8,所以转换后的结果是8个字节的long类型值。

    根据LITTLE_ENDIAN字节顺序,字节数组中的第一个字节对应long类型的最低位,而最后一个字节对应long类型的最高位。因此,字节数组[49, 49, 49, 49, 49, 49, 49, 49]转换为long类型值时,最低位的字节是49,最高位的字节是49。

    根据LITTLE_ENDIAN字节顺序,将字节序列转换为long类型值的计算公式如下:
    result = byte[0] * 2^0 + byte[1] * 2^8 + byte[2] * 2^16 + byte[3] * 2^24 + byte[4] * 2^32 + byte[5] * 2^40 + byte[6] * 2^48 + byte[7] * 2^56

    将字节数组[49, 49, 49, 49, 49, 49, 49, 49]带入计算公式中,可以得到最终的结果3544668469065756977。

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀