在電腦領域,「大端序」(big endian)和「小端序」(little endian)指的是一個數值的位元組在記憶體中儲存的順序:是以最高有效位元組(大端)或最低有效位元組(小端)優先。

例如,十六進位值 0x12345678 由四個位元組組成。如果我們指示電腦將其儲存在某個記憶體位址 `mem`,電腦的端序將決定最低有效位元組(0x78)或最高有效位元組(0x12)會儲存在第一個記憶體位址 `mem[0]`。

根據維基百科,這個術語借鑒自小說《格列佛遊記》,其中描述了「大端派」(Big-Endians)和「小端派」(Little-Endians)之間關於如何打破水煮蛋的衝突,前者從較大的一端開始,後者則從較小的一端開始。

有些處理器架構同時支援這兩種模式,但大多數現代個人電腦和智慧型手機都是小端序系統(例如 Intel x86_64 或 ARM AArch64)。

在程式設計時,編寫能在任一種位元組順序系統上正確運行的程式碼仍然很重要(例如,請參閱「位元組順序的迷思」)。但是,如果沒有大端序機器的存取權限,該如何進行測試呢?QEMU 提供了一個方便的解決方案。透過其使用者模式模擬,我們可以輕鬆地在大端序模擬系統上運行二進位檔,並使用 GCC 進行交叉編譯到該系統。

這個程式(endian.c)展示了位元組順序的效果:

在我的小端序 Linux 機器上運行如下:

MIPS 是一種大端序架構。在 Debian 系統上,我們可以這樣安裝 QEMU 使用者模式模擬和 MIPS 的 GCC:

現在我們可以看到值以大端序儲存了!

我們可以嘗試更奇特的架構,例如目標為 IBM z/Architecture (s390x),它也是大端序的: