相信大家都知道大端儲存和小端儲存的概念,這在平時,我們一般不用考慮,但是,在某些場合,這些概 念就顯得很重要,比如,在 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; } }
在我的電腦上啟動並執行截圖如下:
由此可見,我的電腦是“小端 儲存”模式,所以,用這種方法,可以擷取電腦的資料存放區模式。