我知道小端和大端在网上被解释过,但我仍然感到困惑。
如果您有一个设置为使用big endian的字节缓冲区。你有:
short value = 4660; // corresponds to 0x1234
当你这样做时:
bb.putShort( 16, value );
字节0x12是否位于索引16处,而0x34位于索引17处。或者,0x34位于索引16处,0x34位于索引17处?我对在线描述感到困惑。
谢谢!
答案 0 :(得分:3)
以0x12345678
为例。
查看它的一种方法:
Endianess | Least Significant Byte | Most Significant Byte | In Memory
----------|------------------------|------------------------|-----------
Big | In The Highest Address | In The Lowest Address | 0x12345678
----------|------------------------|------------------------|-----------
Little | In The Lowest Address | In The Highest Address | 0x78563412
另一种观察方式:
Endianess | In The Lowest Address | In The Highest Address | In Memory
----------|------------------------|------------------------|-----------
Big | Most Significant Byte | Least Significant Byte | 0x12345678
----------|------------------------|------------------------|-----------
Little | Least Significant Byte | Most Significant Byte | 0x78563412
如果你正在寻找一种记忆方法,那么请注意每种方法都有自己的意义:
答案 1 :(得分:2)
您可以通过编写6(!)行代码来解决这个问题。
ByteBuffer allocate = ByteBuffer.allocate(2);
allocate.order(ByteOrder.BIG_ENDIAN);
allocate.putShort((short) 0x1234);
allocate.rewind();
System.out.println(Integer.toHexString(allocate.get()));
System.out.println(Integer.toHexString(allocate.get()));
提示:" Big End" -ian在最后一个地址有最后一个字节。因此,内存正是您将其视为0x12 0x34
的方式。