Posted on 2008-07-09 18:05
eyesmart 閱讀(681)
評論(0) 編輯 收藏 引用 所屬分類:
Basic Knowledge
Big-endian和Little-endian是用來表述一組有序的字節數存放在計算機內存中時的順序的術語。Big-endian是將高位字節(序 列中最重要的值)先存放在低地址處的順序,而Little-endian是將低位字節(序列中次要的值)先存放在低地址處的順序。在使用 Big-endian順序的計算機中,要存儲一個十六進制數4F52所需要的字節在內存中的排列順序將會是4F52。而在使用Little-endian順序的系統中,存儲的順序將會是524F。IBM的370大型機、大多數基于RISC的計算機,Motorola的微處理器以及TCP/IP協議使用的是Big-endian順序。而 Intel的處理器和DEC公司的一些程序則使用的Little-endian方式。所以在進行網絡協議編程的時候,要注意這種數據在不同CPU上的可移植性,特別是在傳輸二進制數值方面,而一般網絡程序中的排列盡可能是Big-endian,判斷這個很簡單,隨便找個數來試下,比如
bool IsLittleEndian()
{
unsigned short a = 0x0102;
byte *b = (byte *)&a;
if(*b == 0x02)
return true;
else
return false;
}
而用下面這段代碼可以把Little-endian轉化為Big-endian (用于基本類型)
template <typename T>
static void LittleToBig(byte *buf, T value)
{
int size = sizeof(T);
for(int i=0; i<size; i++)
buf[i] = (byte)(value>>(8*(size-i-1)));
}