合肥市中小企業(yè)局網(wǎng)站實(shí)時(shí)seo排名點(diǎn)擊軟件
目錄
1.舉例:
2.深入刨析大端小端的組成:
3.判斷當(dāng)前編譯環(huán)境是大端還是小端的方法
4.以函數(shù)的形式來判斷當(dāng)前的編譯環(huán)境是大端還是小端【就是把判斷大端小端的方法放進(jìn)函數(shù)里面來實(shí)現(xiàn),得到返回值,可以減少main()函數(shù)的內(nèi)存】
數(shù)據(jù)在內(nèi)存中的字節(jié)序存儲(chǔ)有兩種方式:一種是大端存儲(chǔ),另一種是小端存儲(chǔ)。
決定數(shù)據(jù)在內(nèi)存中的字節(jié)序存儲(chǔ)方式的因素是當(dāng)前編譯器的環(huán)境【★★★★★】。
小端字節(jié)序存儲(chǔ):一個(gè)數(shù)據(jù)的低位字節(jié)的數(shù)據(jù)存放在內(nèi)存的低地址處,高位字節(jié)的數(shù)據(jù)存放在內(nèi)存的高地址處。【小端的數(shù)據(jù)舉例:0x78563412=12 34 56 78】
大端字節(jié)序存儲(chǔ):一個(gè)數(shù)據(jù)的低位字節(jié)的數(shù)據(jù)存放在內(nèi)存的高地址處,高位地址的數(shù)據(jù)存放在內(nèi)存的低地址處?!敬蠖说臄?shù)據(jù)舉例:0x78563412=78 56 34 12】
?
1.舉例:
#include<stdio.h>
int main() {int a = 0x11223344;//當(dāng)前的環(huán)境下數(shù)據(jù)是以小端的形式存放的,即:0x11223344=44 33 22 11;int b = 0x21;//小端存放,即:0x01=01 00 00 00;char* p =(char*) & b;//拿出來的是b的四個(gè)字節(jié)【這個(gè)是先取出對(duì)應(yīng)地址,再強(qiáng)制類型轉(zhuǎn)換】中,地址較小的那個(gè)字節(jié)的地址for (int i = 0; i < 4; i++) {printf("%0x\n",*(p+i));//%0x輸出的是十六進(jìn)制形式的整型}return 0;
}
運(yùn)行結(jié)果:
2.深入刨析大端小端的組成:
#include<stdio.h>
int main() {int a = 10005;//a在內(nèi)存中的存儲(chǔ)形式是:15 27 00 00【5是個(gè)位,1是十位,7是百位,2是千位】//(?★★★★★這個(gè)中的15是指十位是1,個(gè)位是5,與個(gè)位的15是F不能混為一談)char* p = (char*)&a;for (int i = 0; i < 4; i++) {printf("%d\n", *(p + i));}//a=10005(十進(jìn)制)=2715(十六進(jìn)制)return 0;
}
運(yùn)行結(jié)果:
圖示:
3.判斷當(dāng)前編譯環(huán)境是大端還是小端的方法
#include<stdio.h>
int main() {int a = 5;char* p = (char*)&a;printf("%d\n", *p);//直接看它的第一個(gè)字節(jié)輸出的是什么,如果是0,說明是大端;如果是5,說明是小端if (*(char*)&a == 5) {printf("數(shù)據(jù)在內(nèi)存中是以小端形式存放\n");}elseprintf("數(shù)據(jù)在內(nèi)存中是以大端形式存放\n");return 0;
}
運(yùn)行結(jié)果:
4.以函數(shù)的形式來判斷當(dāng)前的編譯環(huán)境是大端還是小端【就是把判斷大端小端的方法放進(jìn)函數(shù)里面來實(shí)現(xiàn),得到返回值,可以減少main()函數(shù)的內(nèi)存】
#include<stdio.h>
int if_duan(int a) {//這個(gè)里面的形式參數(shù)可以設(shè)置成任何變量,和實(shí)際參數(shù)不一樣也行,均不影響return *(char*)&a == 5;
}
int main() {int a = 5;int ret=if_duan(a);if (ret = 1) {printf("數(shù)據(jù)在當(dāng)前編譯環(huán)境下是小端形式存儲(chǔ)\n");}elseprintf("數(shù)據(jù)在當(dāng)前編譯環(huán)境下是大端形式存儲(chǔ)\n");return 0;
}
運(yùn)行結(jié)果: