推斷CPU 是小端存儲(Little endian)還是大端存儲(Big endian)模式
阿新 • • 發佈:2017-06-19
art div 版本 ack 一個 fine name clas char
第一個版本號:
//return true in big-endian machines bool check_big_endian1() { int a = 0; int *p = &a; *(char *)p = 1; return a != 1; }
採用union的第二個版本號:
//return true in big-endian machines bool check_big_endian2() { union{ int a; char b; }var;//sizeof(var)=4 var.a = 1; return var.b != 1; }
最後看一個避免函數調用的版本號:
static union { int a; char b; }_s_var_endian_check = {1}; #define ISLITTLEENDIAN (_s_var_endian_check.b == 1) #define ISBIGENDIAN !ISLITTLEENDIAN
這樣就能夠通過宏ISLITTLEENDIAN和ISBIGENDIAN讀取靜態變量的值來推斷是否是小端模式或者大端模式了。
只是這是C的寫法。C++裏面能夠採用內聯(inline)函數來避開對宏的使用。
推斷CPU 是小端存儲(Little endian)還是大端存儲(Big endian)模式