偶:注意:大小端的高低位資料是按位址來計算的。如0x1001,10是高位位元組,01是低位位元組。char *s="abcd",a是高位位元組……
所謂的大端模式,是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;
所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。
為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為 8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對於位數大於 8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小 端儲存模式。例如乙個16bit的short型x,在記憶體中的位址為0x0010,x的值為0x1122,那麼0x11為高位元組,0x22為低位元組。對於 大端模式,就將0x11放在低位址中,即0x0010中,0x22放在高位址中,即0x0011中。小端模式,剛好相反。我們常用的x86結構是小端模 式,而keil c51則為大端模式。很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。
下面這段**可以用來測試一下你的編譯器是大端模式還是小端模式:short int x;
char x0,x1;
x=0x1122;
x0=((char*)&x)[0]; //低位址單元
x1=((char*)&x)[1]; //高位址單元
若x0=0x11,則是大端; 若x0=0x22,則是小端......
上面的程式還可以看出,資料定址時,用的是低位位元組的位址。
偶:另外:網路傳輸說的大小端是這樣的:
分析圖3 - 1中的首部。最高位在左邊,記為0 bit;最低位在右邊,記為31 bit。
4個位元組的32 bit值以下面的次序傳輸:首先是0~7 bit,其次8~15 bit,然後1 6~23 bit,
最後是24~31 bit。這種傳輸次序稱作big endian位元組序。由於t c p / i p首部中所有的二進位制整數
在網路中傳輸時都要求以這種次序,因此它又稱作網路位元組序。以其他形式儲存二進位制整數
的機器,如little endian格式,則必須在傳輸資料之前把首部轉換成網路位元組序。
大小端模式
所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...
大小端模式
端模式 endian 的這個詞出自jonathanswift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為bigendian,從尖頭開始將雞蛋敲開的人被歸為littileendian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endian ...
大小端模式
如下程式 記憶體位址分配中,0040102b位址上是01,四個為乙個int型,位址從左向右增加,因此0x01在低位址上,所以這個x86電腦是小端模式 說明不是大端,是小端 include includeint main int ptr1 int a 1 int ptr2 int int a 1 in...