码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-13 19:31:38      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

比如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

标签:

原文地址:http://www.cnblogs.com/zuoyuan/p/4728038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!