網絡字節序跟主機字節序有什麼區別

網絡字節序跟主機字節序有什麼區別,這是我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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章