C语言_大小端与union

来源:互联网 发布:会员积分管理系统源码 编辑:程序博客网 时间:2024/06/05 21:32

大端(big_endian):字数据的高字节存储在低地址中,而字数据的低字节存储在高地址中。

小端(little_endian):字数据的高字节存存储在高地址中,而字数据的低字节存储在低字节中。


而对union型成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址位置开始的。

利用这个特性,我们可以判断当前系统是大端还是小端。


#include <stdio.h>union AA{        int i;        char a[2];};int is_little_endian(){        union check        {                int i;                char ch;        }c;        c.i = 1;        return (c.ch == 1);}int main(){        int ret;        union AA *p, u;        p = &u;        memset(&u, 0, sizeof(union AA));        p->a[0] = 0x39;        p->a[1] = 0x38;        printf("0x%x\n", p->i);        if(is_little_endian()){                printf("little endian!\n");        }        else{                printf("big endian!\n");        }        return 0;}


test@test:~/tmp/cbase$ gcc union.c test@test:~/tmp/cbase$ ./a.out 0x3839little endian!



原创粉丝点击