機器大小端的檢測

 // 解釋一下就是將  0x11223344 看作字符串 “0x11223344\0”;尾端:44;

               // 高端就是 “11 22 33 44” 進行存儲;(大端)

                        地址      0    1   2   3

                                     低地址--->高地址:尾端44存在高地址;

              //  低尾端就是 “ 44 33 22 11”進行存儲;(小端)

                         地址      0   1   2   3

                                     低地址--->高地址:尾端44存在低地址;

        2. 在這裏先列出我所知到的兩種判斷機器大小端存儲的方式:

方式 1:

/* 利用指針來區分大小端 */

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. void Judge_duan()  
  2. {  
  3.     int a = 1;  //定義爲1是爲了方便 如果你喜歡你可以隨意,  
  4.                 //只要你能搞清楚 例如:0x11223344;  
  5.   
  6.     charchar *p = (charchar *)&a;//在這裏將整形a的地址轉化爲char*;  
  7.                          //方便後面取一個字節內容  
  8.   
  9.     if(*p == 1)//在這裏解引用了p的一個字節的內容與1進行比較;  
  10.         printf("小端\n");  
  11.     else  
  12.         printf("大端\n");  
  13.   
  14. }  


這是我自己畫的圖解  比較粗糙 希望可以幫助大家理解!

方式 2

[objc] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. /* 利用聯合體來檢測大小端 */  
  2. #include<stdio.h>  
  3. #include<stdlib.h>  
  4.   
  5. void Judge_duan(void)  
  6. {  
  7.     union t  
  8.     {  
  9.          int i;  
  10.          char c;  
  11.     } t1;  
  12.      t1.i = 1;  
  13.      if(t1.c == 1)  
  14.          printf("小端\n");  
  15.      else  
  16.          printf("大端\n");  
  17. }  
  18.   
  19. int main()  
  20. {  
  21.     Judge_duan();//在這裏我們封裝成一個函數,  
  22.                 //可以有參數和返回值也可以不需要  
  23.     system("pause");  
  24.     return 0;  
  25. }  


聯合的概念在這裏我簡單的說明一下,不作詳細介紹;


  3.聯合

         聯合體的各個成員共用內存,並應該同時只能有一個成員得到這塊內存的使用權(即對內存的讀寫),而

結構體各個成員各自擁有內存,各自使用互不干涉。

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