机器大小端的检测

 // 解释一下就是将  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
 
  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. }  


机器大小端的检测_第1张图片

这是我自己画的图解  比较粗糙 希望可以帮助大家理解!

方式 2

[objc]  view plain  copy
 
  1. /* 利用联合体来检测大小端 */  
  2. #include  
  3. #include  
  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.联合

         联合体的各个成员共用内存,并应该同时只能有一个成员得到这块内存的使用权(即对内存的读写),而

结构体各个成员各自拥有内存,各自使用互不干涉。

你可能感兴趣的:(C_world,大小端)