相信大家都知道大端存儲和小端存儲的概念,這在平時,我們一般不用考慮,但是,在某些場合,這些概 念就顯得很重要,比如,在 Socket 通信時,我們的電腦是小端存儲模式,可是傳送數據或者消息給對方電腦 時,恰巧,對方的電腦是大端存儲,那麼,如果你直接的傳輸,那麼對方解析的肯定就是亂碼了,所以,我們 需要在傳輸數據之前轉換成網絡順序。
這篇文章的目的不是解決上述的處理字節順序的問題,而是, 用C語言實現測試電腦的字節存儲順序。
在C語言中有一種結構--Union,被稱為“共用體”,它可以像 struct一樣存儲不同類型的數據,但是它在內存中所占的大小是最大的數據類型所占的字節數(這裡不考慮字 節對齊的問題)。由此,我們可以利用這個數據類型判斷了。
具體方法如下:
假如,現在我們 存儲一個整型的變量,由於這個整型的變量占4個字節,所以,它在計算機中的存儲應該是這個樣子:
(0x)0001 低地址--->高地址 大端存儲
(0x)0001 高地址<---低地址 小端存儲
所以,我們可以取得低地址的數據,測試是1或者是0,如果是1,那麼就是小端存儲,如果是0,那麼就是 大端存儲。
下面,給出測試代碼:
#include <iostream>
using namespace std;
void checkSystemBigOrLittle(void);
int main(void)
{
checkSystemBigOrLittle();
system("pause");
return 0;
}
void checkSystemBigOrLittle(void)
{
typedef union MyUnion
{
int i;
char c;
};
MyUnion mu;
mu.i = 1;
if(mu.c == 1)
{
cout<<"你的電腦是小端存儲模式。。。"<<endl;
}
else if (mu.c == 0)
{
cout<<"你的電腦是大端存儲模式。。。"<<endl;
}
else
{
cout<<"很抱歉,出錯了。。。"<<endl;
}
}
在我的電腦上運行的截圖如下:

由此可見,我的電腦是“小端 存儲”模式,所以,用這種方法,可以獲取電腦的數據存儲模式。