[小知识]使用union判断机器内存是大端序存储还是小端序存储 @ C

比如int i = 1,如果是小端序存储,那么在内存中应该是这样的:0x01 0x00 0x00 0x00;如果是大端序存储的,在内存中应该是:0x00 0x00 0x00 0x01。

那么如何编程来判断机器是大端序存储呢还是小端序存储呢?

上代码:

#include <stdio.h>

int isBigEndian()
{
    union
    {
        int i;
        char c;
    }test;
    
    test.c = 1;

    return test.i != 1;
}


int main()
{
    printf("%d\n", isBigEndian());
}

由于union中的int和char都是从低地址开始存储的,所以如果是小端序存储的话,对test.c赋值为一,则union应该是0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00,那么test.i的值应该也是1,那么test.c==test.i。如果是大端序存储的话,union在内存中应该是这样:0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00,那么test.i的值应该是2的8次方,即test.i==256。也就是说,如果是大端序存储的话,test.i != test.c。如果test.i != test.c,那么为大端序存储,如果相等,则为小端序存储。

你可能感兴趣的:([小知识]使用union判断机器内存是大端序存储还是小端序存储 @ C)