網絡字節序跟主機字節序有什麼區別,這是我16年9月份校招面試騰訊被問到的一個問題,也是Linux服務器開發崗常考的面試題。
字節序分爲大端字節序和小端字節序
- 大端字節序是指一個整數的高位字節(32-31bit)存儲在內存的低地址處,低位字節(0-7bit)存儲在內存的高地址處。
- 小端字節序是指一個整數的高位字節(32-31bit)存儲在內存的高地址處,低位字節(0-7bit)存儲在內存的低地址處。
現代PC大多采用小端字節序,所以小端字節序又被稱爲主機字節序。
大端字節序也稱爲網絡字節序。
即使是同一臺機器上的兩個進程(比如一個由C語言,另一個由Java編寫)通信,也要考慮字節序的問題(JVM採用大端字節序)。
可編寫 byteorder.cpp 判斷機器字節序
void byteorder()
{
union
{
short value;
char union_bytes[sizeof(short)];
}test;
test.value = 0x0102;
if (sizeof(short) == 2)
{
if (test.union_bytes[0] == 1 && test.union_bytes[1] == 2)
cout << "big endian" << endl;
else if (test.union_bytes[0] == 2 && test.union_bytes[1] == 1)
cout << "little endian" << endl;
else
cout << "unknown" << endl;
}
else
{
cout << "sizeof(short) == " << sizeof(short) << endl;
}
return ;
}
該程序在我的ubuntu跟win10下執行結果都是 little endian