大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放
在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放
在低地址中。
union型数据所占的空间等于其最大的成员所占的空间。对union型的成员的存取都是
相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都
假设: printf("p->i=0x%X\n",p->i); 打印的是0x3938说明高字节存在低地址中,那么就是大端模式
在高地址中。
小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放
在低地址中。
union型数据所占的空间等于其最大的成员所占的空间。对union型的成员的存取都是
相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都
是从union的首地址位置开始。
一般情况,我们的计算机都是小端模式
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct st_typy
{int i;int a[0];
}type_a;
union
{int i;char a[2];
}*p,u;void main(void)
{int a[5] = {1,2,3,4,5};int *ptr=(int *)(&a+1);p=&u;p->a[0]=0x39;p->a[1]=0x38;printf("p->i=0x%X\n",p->i);printf("%d\n",sizeof(type_a));printf("%d,%d\n",*(&a+1-1),*(ptr-1));
}
假设: printf("p->i=0x%X\n",p->i); 打印的是0x3938说明高字节存在低地址中,那么就是大端模式
printf("p->i=0x%X\n",p->i); 打印的是0x3839说明高字节存在高地址中,那么就是小端模式
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct st_typy
{int i;int a[0];
}type_a;
union
{int i;char a[2];
}*p,u;
int checkSystem()
{union check{int i;char ch;}c;c.i=1;return((c.ch==1)?1:0);
}void main(void)
{int a[5] = {1,2,3,4,5};int *ptr=(int *)(&a+1);int i=1;p=&u;p->a[0]=0x39;p->a[1]=0x38;if(checkSystem){printf("计算机是小端模式\n");}printf("p->i=0x%X\n",p->i);printf("%d\n",sizeof(type_a));printf("%d,%d\n",*(&a+1-1),*(ptr-1));
}