簡單實現查看系統字節序

導語:

在計算機中間,不同的操作系統支持的字節序不同,簡單來說:比如一個十六進制的數在內存中是怎樣存儲的 列:0x0102  在計算機中存儲時 是 01 在低字節還是02 在低字節。我們可以通過如下程序實現
#include <stdio.h>
int main(int argc , char ** agrv)
{
    union{
        short s;
        char c[sizeof(s)];
    }un;
    un.s = 0x0102;
    if(sizeof(short) == 2)
    {
        if(un.c[0] == 1 && un.c[1] == 2)
            printf("big-endian\n");
        else if(un.c[0] ==2 && un.c[1] == 1)
            printf("little-endian\n");
        else
            printf("unknow\n");
    }
    else
        printf("sizeof(short) = %d\n", sizeof(short));
    return 0;
}
中間的 union 是 C語言中的公用體,與 struct 體不同的是 結構體 中的每個值都有屬於自己的存儲區域,不會重合,而 union中的每個值公用一處存儲區域,所以當我 在 使用 un.s = 0x0102 後 公用體就已經存儲了0x0102, 當我使用 un.c[0],和 un.c[1] 時 由於訪問的是與 un.s相同的內存區域,故取出來的值就是 我使用 un.s 存進去的值, 從而通過比較 un.c[0] 和 un.c[1] 的值 就可以知道0x0102 在內存中的存儲順序。
最後可能有些 庫裏面的 short 的位數不爲16位,所以可能得不到我們想要的結構

需要更加深入的 請看 《unix 網絡編程 套接口》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章