所謂「大端」是指高位元組存放在低記憶體位址,而「小端」則相反,低位元組佔據低位址。以十六進位值 0x12345678 為例,在大端機器上記憶體中依序為 12 34 56 78,小端則為 78 56 34 12。同一款 CPU 在不同作業系統下可能採用不同位元組序,但我們常見的 x86 架構搭配 Windows/Linux 均為小端模式。
Union(聯合體)所有成員共用同一塊記憶體,其大小由佔用空間最大的成員決定。我們可以定義一個包含 int 與 char 的 union,將 int 賦值為 0x01000002,然後檢查 char 成員(佔用最低位址的位元組)是否為 0x01。若是則為大端,否則為小端。
#include <iostream>
using namespace std;
union EndianTest {
int number;
char byte;
} test;
bool isBigEndian() {
test.number = 0x01000002;
return (test.byte == 0x01);
}
int main() {
if (isBigEndian())
cout << "Big Endian" << endl;
else
cout << "Little Endian" << endl;
return 0;
}
在 32 位元系統上,int 佔 4 位元組,char 僅取第一個位元組,因此能直接反映最低位址儲存的是高位元組還是低位元組。這項技巧簡潔高效,廣泛用於跨平台網路程式開發中。