Posted on 2010-04-24 23:41
~William~ 閱讀(1055)
評論(0) 編輯 收藏 引用 所屬分類:
C語言基礎
大端法(Big_Endian):高位字節存放在內存的低地址端即該值的起始地址,低位字節存放在內存的高地址端。
小端法(Little_Endian):低位字節存放在內存的低地址即該值的起始地址,高位字節存放在內存的高地址位。
舉例說明:
對于整形0x12345678。它在大端法和小端法的系統內中,分別如圖1所示的方式存放。

網絡字節序
我們知道網絡上的數據流是字節流,對于一個多字節數值,在進行網絡傳輸的時候,先傳遞哪個字節?也就是說,當接收端收到第一個字節的時候,它是將這個字節作為高位還是低位來處理呢?
網絡字節序定義:收到的第一個字節被當作高位看待,這就要求發送端發送的第一個字節應當是高位。而在發送端發送 數據時,發送的第一個字節是該數字在內存中起始地址對應的字節。可見多字節數值在發送前,在內存中數值應該以大端法存放。
網絡字節序說 是大端字節序。
比如我們經過網絡發送0x12345678這個整形,在80X86平臺中,它是以小端法存放的,在發送前需要使用系統提供的htonl將其轉換成大端法存放,如圖2所示。

判斷大小端的方法:
/*
@brief 判斷當前平臺式的大小端,利用聯合體的字節排序是按照從低到高的特性
@return 1小端 0 大端
*/
int GetTypeOfEndian(void)
{
Union w
{
int a;
char b;
};
union w c;
c.a = 1;
return (c.b == 1);
}