如何判別機器是大端還是小端
阿新 • • 發佈:2019-01-26
最近在學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
我的機器是小端的,下面是執行程式輸出結果: