跳转至

字節順序

本頁面將簡要介紹字節順序的概念和分類。

簡介

字節順序是跨越多字節的程序對象的存儲規則,表示一個對象的字節的排列方法。

分類

字節順序有兩種,分為小端序(little endian)和大端序(big endian)。

為方便介紹,接下來以一個位於 0x100 處,類型為 int,十六進制值為 0x01234567 的變量為例。其中 0x01 是最高位有效字節,0x67 是最低位有效字節。

小端序

小端序是指機器選擇在內存中按照從 最低 有效字節到 最高 有效字節的順序存儲對象。

上文提到的變量表示如下:

.... 0x100 0x101 0x102 0x103 ....
.... 67 45 23 01 ....

大端序

大端序是指機器選擇在內存中按照從 最高 有效字節到 最低 有效字節的順序存儲對象。

上文提到的變量表示如下:

.... 0x100 0x101 0x102 0x103 ....
.... 01 23 45 67 ....

兩種順序的區別

事實上,這兩種字節順序沒有孰優孰劣之分。這兩種順序的名字「小端」和「大端」,正是出自《格列佛遊記》一書。書中,小人國裏兩個派別交戰不休的原因是無法就從小端還是大端剝雞蛋達成一致。就和剝雞蛋的爭論一樣,選擇何種字節順序的爭論是非技術性的。

當然,字節順序的不一致會導致二進制數據在不同類型的機器之間進行傳輸時被反序。為了避免這件事情,網絡應用程序建立了一套標準,保證發送過程中是使用約定好的網絡標準,而不是不同機器的內部表示。

順序選擇慣例

  • 小端序:x86, ARM processors running Android, iOS, and Windows

  • 大端序:Sun, PPC Mac, Internet