網路資料的大小端問題

2020-07-16 10:04:43
不同 CPU 中,4 位元組整數 1 在記憶體空間的儲存方式是不同的。4 位元組整數 1 可用 2 進位制表示如下:

00000000 00000000 00000000 00000001

有些 CPU 以上面的順序儲存到記憶體,另外一些 CPU 則以倒序儲存,如下所示:

00000001 00000000 00000000 00000000

若不考慮這些就收發資料會發生問題,因為儲存順序的不同意味著對接收資料的解析順序也不同。

大端序和小端序

CPU 向記憶體儲存資料的方式有兩種:
  • 大端序(Big Endian):高位位元組存放到低位地址(高位位元組在前)。
  • 小端序(Little Endian):高位位元組存放到高位地址(低位位元組在前)。

僅憑描述很難解釋清楚,不妨來看一個範例。假設在 0x20 號開始的地址中儲存 4 位元組 int 型資料 0x12345678,大端序 CPU 儲存方式如下圖所示:
整數 0x12345678 的大端序字節表示
圖1:整數 0x12345678 的大端序位元組表示