判斷一個CPU大小端模式

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

解答:
  1. int checkCPU()  
  2.  
  3. {   
  4.  
  5. union w{   
  6.  
  7. int a;  
  8.  
  9. char b;  
  10.  
  11. } c;  
  12.  
  13. c.a = 1;   
  14.  
  15. return(c.b ==1);   
  16.  
    剖析:嵌入式系統開發者應該對Little-endian和Big-endian模式非常瞭解。採用Little-endian模式的CPU對操作數的存 放方式是從低字節到高字節,而Big-endian模式對操作數的存放方式是從高字節到低字節。例如,16bit寬的數0x1234在Little- endian模式CPU內存中的存放方式(假設從地址0x4000開始存放)爲:
內存地址0x40000 x4001
存放內容0x34 0x12
而在Big-endian模式CPU內存中的存放方式則爲:
內存地址0x40000 x4001
存放內容0x12 0x34
判斷CPU是大端還是小端?明白大端和小端的區別,實現起來就非常簡單:
  1. #include <stdio.h>  
  2.  
  3. int main(void)  
  4.  
  5. {  
  6.  
  7. union u_endian{  //union是聯合體,各變量之間共享內存
  8.  
  9. short s;  
  10.  
  11. char c[2];  
  12.  
  13. }u;   
  14.  
  15. if(sizeof(short) == 2){  
  16.  
  17. u.s = 0x0102;  
  18.  
  19. if(u.c[0] == 1 && u.c[1] == 2){  
  20.  
  21. printf("big enidan\n");  
  22.  
  23. }else if(u.c[0] == 2 && u.c[1] == 1){  
  24.  
  25. printf("little endian.\n");  
  26.  
  27. }  
  28.  
  29. return 0;  
  30.  
  31. }  
  32.  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章