判斷大小端的程式

2021-06-29 00:19:53 字數 986 閱讀 9980

**:

一、大端與小端、msb與lsb

在嵌入式開發中,大端(big-endian)和小端(little-endian)是乙個很重要的概念。假如現有一32位int型數0x12345678,那麼其msb(most significant byte,最高有效位元組)為0x12,其lsb (least significant byte,最低有效位元組)為0x78,在cpu記憶體中有兩種存放方式:(假設從位址0x4000開始存放)

方式1:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

方式2:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12

那麼,方式1的存放形似稱為大端模式(big-endian),方式2的存放形似稱為小端模式(little-endian)。即,在大端模式下,資料的msb存放在低位址;在小端模式下,資料的lsb 存放在低位址。

很多情況下我們都是用一小段測試**來判斷cpu的大小端模式的

(大端-->高尾端,小端-->低尾端)

/**

程式1:

返回1表示大端;返回0表示小端

**/int checkendian()

/**程式2:

返回1表示大端,返回0表示小端

**/int checkendian()u;

u.ii=0x11223344;

/**cout<<"binary u.ii=";

int temp;

for (int i=7;i>=0;i--)

cout<

大小端的判斷

在計算機系統中,我們以位元組為儲存單位,每個位址的單元都是對應的乙個位元組,乙個位元組為8bit.在c語言中,不僅僅是乙個位元組來儲存資料,除了乙個位元組的char,還有兩個位元組的short,四個位元組的int,另外對於位數大於8位的處理器,例如32位處理器。由於暫存器的寬度大於乙個位元組的長度,...

大小端的判斷

1 什麼是大小端?大端 資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址處 小端 資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址處 2 為什麼要有大小端?為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,...

判斷大小端

int i 1 char p char i if p 1 printf 1 else printf 2 大小端儲存問題,如果小端方式中 i佔至少兩個位元組的長度 則i所分配的記憶體最小位址那個位元組中就存著1,其他位元組是0.大端的話則1在i的最高位址位元組處存放,char是乙個位元組,所以強制將c...