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。

    评论

报告相同问题?

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?