编译器的大小端模式
大端模式(Big_endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放
在高地址中。
小端模式(Little_endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在高地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放
在低地址中。
union型數(shù)據(jù)所占的空間等于其最大的成員所占的空間。對(duì)union型的成員的存取都是
相對(duì)于該聯(lián)合體基地址的偏移量為0處開(kāi)始,也就是聯(lián)合體的訪問(wèn)不論對(duì)哪個(gè)變量的存取都
假設(shè):??? printf("p->i=0x%X\n",p->i); 打印的是0x3938說(shuō)明高字節(jié)存在低地址中,那么就是大端模式
在高地址中。
小端模式(Little_endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在高地址中,而字?jǐn)?shù)據(jù)的低字節(jié)則存放
在低地址中。
union型數(shù)據(jù)所占的空間等于其最大的成員所占的空間。對(duì)union型的成員的存取都是
相對(duì)于該聯(lián)合體基地址的偏移量為0處開(kāi)始,也就是聯(lián)合體的訪問(wèn)不論對(duì)哪個(gè)變量的存取都
是從union的首地址位置開(kāi)始。
一般情況,我們的計(jì)算機(jī)都是小端模式
#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)); }
假設(shè):??? printf("p->i=0x%X\n",p->i); 打印的是0x3938說(shuō)明高字節(jié)存在低地址中,那么就是大端模式
?????????????? printf("p->i=0x%X\n",p->i); 打印的是0x3839說(shuō)明高字節(jié)存在高地址中,那么就是小端模式
#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("計(jì)算機(jī)是小端模式\n");}printf("p->i=0x%X\n",p->i);printf("%d\n",sizeof(type_a));printf("%d,%d\n",*(&a+1-1),*(ptr-1)); }
總結(jié)
- 上一篇: JSON转Excel
- 下一篇: PUN☀️四、服务器大厅建房解析