關於大端模式(big-endian)與小端模式(little-endian)
阿新 • • 發佈:2019-01-01
大端模式和小端模式討論的是資料的多個位元組在記憶體中如何排列的問題。
大端模式(big-endian):資料的高位儲存在低地址,資料的低位儲存在高地址。
小端模式(little-endian):資料的高位儲存在高地址,資料的低位儲存在低地址。
下面用int x = 0x12345678舉個例子。
在大端模式下,記憶體中的存放如下:
0x1000 | 0x1001 | 0x1002 | 0x1003 |
---|---|---|---|
0x12 | 0x34 | 0x56 | 0x78 |
在小端模式下,記憶體中的存放如下:
0x1000 | 0x1001 | 0x1002 | 0x1003 |
---|---|---|---|
0x78 | 0x56 | 0x34 | 0x12 |
從兩張表格中能夠看出,大端模式類似於將資料當成字串來處理,直接按照讀的順序儲存;小端模式或許更加符合人的直觀?(低地址存放低位,高地址存放高位)
如果程式需要處理原始位元組流,那麼必須要確保傳送方和接收方使用同一種模式,否則資料就會一團糟。就那上面的例子來說,假設現在有一個位元組流,你打算把流中的資料分成4個位元組一組,用int[]來儲存。假設前4個位元組為 6a 6b 6c 6d,那麼在小端模式下,你應該構建一個int x = 0x6d6c6b6a;在大端模式下,你應該構建一個int x = 0x6a6b6c6d。
附:檢測系統使用的是哪種模式(Java):
if(ByteOrder.nativeOrder ()==ByteOrder.BIG_ENDIAN){
System.out.println("big endian");
}else {
System.out.println("little endian");
}