[Linux]cpu little big endian 判斷

union 的成員本身就被存放在相同的內存空間(共享內存,正是union 發揮作用、做貢獻的去處),因此,我們可以將一個CHAR/BYTE 數據和一個整型數據同時作爲一個union 的成員,得出如下答案:

int checkCPU()
{
   {
   union w
   {
      int a;
      char b;
   } c;
   c.a = 1;
   return (c.b == 1);
   }
}

實現同樣的功能,我們來看看Linux 操作系統中相關的源代碼是怎麼做的:
static union { char c[4]; unsigned long mylong; } endian_test = {{ ‘l’, ‘?’, ‘?’, ‘b’ } };

#define ENDIANNESS ((char)endian_test.mylong)

Linux 的內核作者們僅僅用一個union 變量和一個簡單的宏定義就實現了一大段代碼同樣的功能!由以上一段代碼我們可以深刻領會到Linux 源代碼的精妙之處!(如果ENDIANNESS=’l’表示系統爲little endian,
爲’b’表示big endian )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章