编译器的大小端模式
发布日期:2021-06-30 18:52:23
浏览次数:3
分类:技术文章
本文共 1153 字,大约阅读时间需要 3 分钟。
大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放 在高地址中。 小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放 在低地址中。 union型数据所占的空间等于其最大的成员所占的空间。对union型的成员的存取都是 相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取都是从union的首地址位置开始。
一般情况,我们的计算机都是小端模式
#include假设: printf("p->i=0x%X\n",p->i); 打印的是0x3938说明高字节存在低地址中,那么就是大端模式#include #include 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); 打印的是0x3839说明高字节存在高地址中,那么就是小端模式
#include#include #include 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));}
转载地址:https://linus.blog.csdn.net/article/details/24713187 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月27日 16时08分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!