判別是大端還是小端

2021-06-18 02:37:33 字數 2580 閱讀 6440

大端序(英:big-endian)或稱大尾序

位址增長方向  →

...0x0a

0x0b

0x0c

0x0d

...

位址增長方向  →

...0x0a0b

0x0c0d

...最高的16bit單元0x0a0b儲存在低位。

小端序(英:little-endian)或稱小尾序

位址增長方向  →

...0x0d

0x0c

0x0b

0x0a

...最低位位元組是0x0d 儲存在最低的記憶體位址處。後面位元組依次存在後面的位址處。

位址增長方向  →

...0x0d0c

0x0b0a

...最低的16bit單元0x0d0c儲存在低位。

←  位址增長方向

...0x0a

0x0b

0x0c

0x0d

...最低有效位(lsb)是0x0d 儲存在最低的記憶體位址處。後面位元組依次存在後面的位址處。

←  位址增長方向

...0x0a0b

0x0c0d

...最低的16bit單元0x0c0d儲存在低位。

請寫乙個

c函式,若處理器是

big_endian

的,則返回

0;若是

little_endian

的,則返回1

解答:

int checkcpu( )

c; c.a = 1;

return(c.b ==1);}

} 剖析:

嵌入式系統開發者應該對little-endian

和big-endian模式非常了解。例如,16bit寬的數0x1234在little-endian模式cpu記憶體中的存放方式(假設從位址0x4000開始存放)為:

記憶體位址

0x4000

0x4001

存放內容

0x34

0x12

而在big-endian

模式cpu記憶體中的存放方式則為:

記憶體位址

0x4000

0x4001

存放內容

0x12

0x34

32bit

寬的數0x12345678

在little-endian

模式cpu

記憶體中的存放方式(假設從位址

0x4000

開始存放)為:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12 而在

big-endian

模式cpu

記憶體中的存放方式則為:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

聯合體union

的存放順序是所有成員都從低位址開始存放。

*************** 呵呵 還是附上 另一段**吧,摘自乙個開源專案 ====

int  big_endian (void)u;

u.l = 1;

return  (u.c[sizeof(long) - 1] == 1);

}有時候,用c語言寫程式時需要知道是大端模式還是小端模式。 所謂的大端模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中。為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為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,則是小端......

大端小端模式及其判別方式

little endian 和big endian 是cpu 存放資料的兩種不同順序。對於整型 長整型等資料型別,big endian 認為第乙個位元組是最高位位元組 按照從低位址到高位址的順序存放資料的高位位元組到低位位元組 而little endian 則相反,它認為第乙個位元組是最低位位元組 ...

大端模式和小端模式的判別!

大端模式 一般我們較習慣的模式,數值的高位存入低位址中,低位存入高位址中。如在16位的cpu中,乙個整型占有2個位元組,如0x1234,它儲存在儲存器的順序是位址的低位存0x12,高位存0x34 小端模式 與大端模式相反,數值的高位存入高位址,低位存入位址中。如條件同上,0x1234,它的儲存的順序...

大端法還是小端法區別

第一部分 基本概念 首先不管是大端法還是小端法儲存,計算機在記憶體中存放資料的順序都是從低位址到高位址,所不同的是首先取低位元組的資料存放在低位址還是取高位元組資料存放在低位址。若首先取高位元組的資料存放在低位址,則是大端法 若首先取低位元組的資料存放在低位址,則是小端法 例如有資料0x012345...