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