大端格式:字數據的高字節存儲在低地址中,而字數據的低字節則存放在高地址中。
小端格式:與大端存儲格式相反,在小端存儲格式中,低地址中存放的是字數據的低字節,高地址存放的是字數據的高字節。
如5A6C
中5A
是高字節、6C
是低字節,在大端序機器中,高字節位於低地址中,即在大端序中按照5A6C
存儲,在小端序中按照6C5A
存儲。
因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為8bit
。但是在C
語言中除了8bit
的char
之外,還有16bit
的short
型,32bit
的long
型(要看具體的編譯器),另外,對於位數大於8
位的處理器,例如16
位或者32
位的處理器,由於寄存器寬度大於一個字節,那麼必然存在著一個如果將多個字節安排的問題。因此就導致了大端存儲模式和小端存儲模式。
請寫一個C
函數,若處理器是Big_endian
的,則返回0
;若是Little_endian
的,則返回1
int checkCPU()
{
union w
{
int a;
char b;
} c;
c.a = 1;
return(c.b == 1);
}
分析:
聯合體union
的存放順序是所有成員都從低地址開始存放。
short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低地址單元
x1=((char*)&x)[1]; //高地址單元
若x0=0x11,則是大端; 若x0=0x22,則是小端......