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



  解答:

int checkCPU()
{
 {
  union w
  {
   int a;
   char b;
  } c;
  c.a = 1;
  return (c.b == 1);
 }
}
 嵌入式系統開發者應該對Little-endian和Big-endian模式非常瞭解。採用Little-endian模式的CPU對操作數的存放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。例如,16bit寬的數0x1234在Little-endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:

內存地址 存放內容
0x4000 0x34
0x4001 0x12

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

內存地址 存放內容
0x4000 0x12
0x4001 0x34

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

內存地址 存放內容
0x4000 0x78
0x4001 0x56
0x4002 0x34
0x4003 0x12

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

內存地址 存放內容
0x4000 0x12
0x4001 0x34
0x4002 0x56
0x4003 0x78

  聯合體union的存放順序是所有成員都從低地址開始存放,面試者的解答利用該特性,輕鬆地獲得了CPU對內存採用Little-endian還是Big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是一個天才的程序員。
請寫一個C函數,若處理器是Big_endian的,則返回0;若是Little_endian的,則返回1
發佈了36 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章