美文网首页
判断机器大小端

判断机器大小端

作者: new_liziang | 来源:发表于2019-04-05 11:45 被阅读0次

    大小端定义

    大端:是指数据的高字节保存在内存的低地址中
    小端:是指数据的低字节保存在内存的低地址中

    思路:

    定义一个拥有一个char,int类型的联合体

    union
    {    
        char ch; 
        int integer;
    }un;
    
    当系统为大端时,这个联合体的内存布局为
    高地址----------->低地址
    char: xx
    int:  xx xx xx xx
    
    当系统为小端时,这个联合体的内存布局为
    char:          xx
    int:  xx xx xx xx
    
    由于联合体共享内存,所以当char类型的成员的地址为int类型成员的低地
    址时,系统为小端,所以当char类型的成员的地址为int类型成员的高地址
    时,系统为大端。
    
    [kiosk@foundation36 ~]$ vim test.c
      1 #include <stdio.h>
      2 
      3 union
      4 {
      5     char ch;
      6     int integer;
      7 }un;
      8 
      9 int main()
     10 {
     11     un.integer = 0x12345678;
     12     if(un.ch == 0x12)
     13     {
     14         printf("big\n");
     15     }
     16     else
     17     {
     18         printf("short\n");
     19     }
     20     return 0;
     21 }
    
    [kiosk@foundation36 ~]$ gcc -o test test.c
    [kiosk@foundation36 ~]$ ./test
    short
    

    第二种方法

    #include<stdio.h>
    union var{
            char c[4];
            int i;
    };
    int main(){
            union var data;
            data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
            data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
            data.c[2] = 0x02;
            data.c[3] = 0x11;//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
    //而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
            printf("%x\n",data.i);
    
    }
    

    相关文章

      网友评论

          本文标题:判断机器大小端

          本文链接:https://www.haomeiwen.com/subject/kiuhiqtx.html