判斷機器大小端的兩種實現方法
阿新 • • 發佈:2019-01-09
大端模式(Big-endian):
是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址
中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放;
小端模式(Little-endian):
是指資料的低位儲存在記憶體的低地址中,而數 據的高位儲存在記憶體的高地址中,和我們的邏輯方法一致。
判斷大小端方法:1、利用指標強制型別轉換; 2、利用共用體所有資料共用同一塊地址空間
1、利用指標強制型別轉換
#include<stdio.h> int main() { int a = 1; char * p = (char*)&a; if (*p == 1) { printf("little-endian"); } else { printf("big-endian"); } return 0; }
如果小端方式中(i佔至少兩個位元組的長度)則i所分配的記憶體最小地址那個位元組中就存著1,其他位元組是0;大端的話則1在i的最高地址位元組處存放。char是一個位元組,所以強制將char型量p指向i則p指向的一定是i的最低地址,那麼就可以判斷p中的值是不是1來確定是不是小端。
2、利用共用體所有資料共用同一塊地址空間
聯合體union的存放順序是所有成員都從低地址開始存放,所以很容易就判別出機器的大小端了。 ^_^#include<stdio.h> union A { char c; int a; }A; int main() { A.a= 1; if (A.c == 1) { printf("little-endian"); } else { printf("big-endian"); } return 0; }