1. 程式人生 > >如何判別機器是大端還是小端

如何判別機器是大端還是小端

最近在學UNP,看到大端小端的概念,於是想寫個程式測試一下自己的機器是哪一種。先解釋一下這兩個概念:
小端:高位元組存在高地址,低位元組存在低地址
大端:高位元組存在低地址,低位元組存在高地址
方法1:

#include <stdio.h>
int main()
{
    short a=0x0102;
    //判斷首地址是1還是2,是1則為小端,是2則為大端
    if((char)a == 1)
        printf("big-endian\n");
    else
        printf("little-endian\n");
    return 0;
}

將a強制轉換成char型,這樣就只會輸出低地址位元組的值,從而判斷出結果。
方法2:

#include <stdio.h>
int main()
{
    typedef union
    {
        short a;
        char c;
    }test;

    test b;
    b.a = 0x0102;
    if(b.c == 0x02)
        printf("little endian\n");
    else
        printf("big endian\n"); 
    return 0;
}

這個是UNP書上的一種方法,原理是union聯合體裡的變數公用一塊記憶體,大小是裡面所有變數當中佔據記憶體空間最大的值。比如上面的test的記憶體大小是sizeof(short)=2

,而c正好佔據的就是這2個位元組的第1個位元組,這樣通過判斷c的值來決定到底是大端還是小端。
我的機器是小端的,下面是執行程式輸出結果:
小端