/*********
* 環境: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也可以判斷大小字節序的。
--本人菜鳥一隻,歡迎大牛們提出錯誤。^_^