【轉】判斷大端小端模式

試題1請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1

解答:

int checkCPU( )

{

    {

           union w

           {  

                  int  a;

                  char b;

           } c;

           c.a = 1;

          return(c.b ==1);

    }

}

剖析:

嵌入式系統開發者應該對Little-endianBig-endian模式非常瞭解。採用Little-endian模式的CPU對操作數的存放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。例如,16bit寬的數0x1234Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:

內存地址

0x4000

0x4001

存放內容

0x34

0x12

而在Big-endian模式CPU內存中的存放方式則爲:

內存地址

0x4000

0x4001

存放內容

0x12

0x34

32bit寬的數0x12345678Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:

內存地址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12

而在Big-endian模式CPU內存中的存放方式則爲:

內存地址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

聯合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕鬆地獲得了CPU對內存採用Little-endian還是Big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是一個天才的程序員。

 

發佈了1 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章