c语言复习之判断机器的大小端存储

一、什么是大小端存储模式呢?
这个问题呢就像吃egg一样,那么到底是从小头剥还是从大头剥呢?那我们就来分析一下再剥喽~
所谓大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位保存在内存的高地址中;
小端模式则是指数据的高位存放在内存的高地址中,数据的低位则存放在内存的低地址中;
也许这样你还是有点迷糊,没关系,我刚开始也迷糊,总是记混,那么下面我们用图分析一下
c语言复习之判断机器的大小端存储_第1张图片
二、那怎么用代码判断机器是大端存储还是小端存储模式呢???
这里我们总结了三种方法,直接抛代码~
利用联合Union的特性:“联合的成员共用同一块空间”
方法一:

int Check()
{
    union UN
    {
        char c;
        int i;
    }un;
    un.i = 1;//0x00000001 如果是小端存储的话1应该表示为0x10000000
    return un.c;
}

方法二也是利用联合体:

int Check()
{
    union UN
    {
        char a[4];
        int i;
    }un;
    un.i = 1;
    printf("%02hhx%02hhx%02hhx%02hhx\n", un.a[0], un.a[1], un.a[2], un.a[3]);
  //02表示整数不够2位就补0  
  //x是以16进制输出
  //hhx表示只输出两位
    return un.a[0];
}

方法三:对类型进行强制转化

int Check()
{
    int i = 1;
    i = *(char*)&i;
    return i;
}

你可能感兴趣的:(c)