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

如何判斷機器CPU是大端模式還是小端模式

說明:這裡面涉及到本機位元組序和網路位元組序的概念。A (本機位元組序) ---- 網路位元組序 ----B(本機位元組序),其中本機位元組序就是指機器是大端還是小端,網路位元組序,我們都知道網路中會將內容封裝成流,比如TCP/IP或者是 ISO,網路位元組序是大端模式。引用網上的一張關於大小端的圖片



  • 將整數儲存後再以字元讀出進行比較

#include <stdio.h>

int main(void) {
        unsigned int a = 0x12345678;
        unsigned char *p =(unsigned char *) &a;
        int i;
        printf("原輸入資料為0x%0x\n", a);
        printf("儲存後再讀取的數為0x");
        for(i=0;i<4;i++){
                printf("%0x", p[i]);
        }
        printf("\n");
        if(p[0] == 0x12)
                printf("big edition\n");
        if(p[0] == 0x78)
                printf("little edition\n");
        return 0;
}

結果輸出為:

原輸入資料為0x12345678

儲存後再讀取的數為0x78563412

little edition

  • 使用union的共享記憶體的機制

#include<stdio.h>

union var
{
        char str;
        int data;
};
int main(void){
    union var endian;
    endian.data=0x01020304;
    if(endian.str==0x01)
    {
        printf( "此機器是大端!\n");
    }
    else if(endian.str==0x04){
        printf("此機器是小端!\n");
    }
    else{
        printf(" 暫無法判斷此機器型別!\n");
    }
}