大小端字節序的判斷

/*********

* 環境:vc++6.0

**********************/

用union實現大小端字節序:

/********************
 * union大小字節端
 ********************/
union test{
	short  i;
	char str[sizeof(short)];
}tt;

void main()
{
	tt.i = 0x0102;
	if(sizeof(short) == 2)
		{
			if(tt.str[0] == 1 && tt.str[1] == 2)
				printf("大端字節序");
			else if(tt.str[0] = 2 && tt.str[1] == 1)
				printf("小端字節序");
			else
				printf("結果未知");
		 }
	else
		printf("sizof(short)=%d,不等於2",sizeof(short));
}



看完上面用union測試大小字節端,那麼用struct可不可以呢,一開始,我寫了一下代碼,結果出乎我的意料

struct test{
	short i;
}tt;

void main()
{
	printf("%d\n", &tt.i);
	printf("%d\n", &tt.i + 1);
}


運行結果:
4424874
4424876

我之前滿以爲結果是4424874和4424845;但是實際的結果卻不是,一開始迷糊了一下,後來知道原來&&tt.i+1中不是地址+1個字節,實際上+2個字節,因爲i是short型,所以編譯器編譯後實際上是+sizeof(short)也就是+2,所以代碼中的地址+1,不一定是你想像中的那樣內存地址+1,要視變量的類型而定。
但是,是不是struct就不可以用來判斷大小端字節序了呢?請看下面的:

/********************
 * struct大小字節端
 ********************/
struct test{
	short i;
	char p;
}tt;

void main()
{
	 tt.i = 0x0102;

	 char i_low = (char) *(&tt.p-2); //tt.i的低地址字節賦值給i_low
	 char i_high = (char) *(&tt.p-1); //tt.i的高地址字節賦值給i_high

	 if(sizeof(short) == 2)
		{
			if( i_low == 1 && i_high == 2)
				printf("大端字節序");
			else if( i_low = 2 && i_high == 1 )
				printf("小端字節序");
			else
				printf("結果未知");
		}
	else
		printf("sizof(short)=%d,不等於2",sizeof(short));
}



如上所示,運用struct也可以判斷大小字節序的。

--本人菜鳥一隻,歡迎大牛們提出錯誤。^_^

發佈了41 篇原創文章 · 獲贊 16 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章