1. 什么是大小端
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
- JVM默认为大端模式
- ByteOrder.nativeOrder()方法返回的是本地操作系统默认的处理方式,与JVM无关
2 踩坑
问题:01 02 03 (16进制),现在假设该数据类型为大端模式,如何得到该数据的小端模式?
答案:根据定义该数据的小端模式应为 03 02 01
好了,这么简单的问题,花1分钟了解概念,1秒钟判定Java肯定自带工具包转换,再花1分钟找到ByteBuffer
为自己的傲慢开始买单:
假如这样写:
ByteBuffer bb = ByteBuffer.allocate(8);
byte[] bytes = Longs.toByteArray(Long.valueOf("010203", 16));
bb.put(bytes);
bb.order(ByteOrder.LITTLE_ENDIAN);
System.out.println(Arrays.toString(bb.array()));
输出:
[0, 0, 0, 0, 0, 1, 2, 3]
卧槽?啥玩意,不是应该 [3, 2, 1, 0, 0, 0, 0, 0] 的吗???
看看按字节读取
for (