大端和小端及如何判斷

2021-06-26 14:14:09 字數 920 閱讀 8131

一、大端與小端、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:

int checkend()

返回值:大端返回1,小段返回0

程式2:

int checkend()

u;u.a = 1;

if (u.b == 1) return 0;

else return 1;

}返回值:大端返回1,小段返回0

補:intel晶元是小端(修改分割槽表時要注意),微控制器一般為大端

判斷大端小端

大端模式 big endian 和小端模式 little endian 在我們傳送資料的時候,我們首先要確定是大端還是小端模式來進行的,在接收方接收的資料必須知道資料是大端還是小端模式,才能正確地讀取和儲存資料起來,否則就會出錯。有些時候cpu公司用大端 c51微控制器 有些cpu用小端 arm 我...

大端小端判斷

聯合體是共享記憶體,在聯合體重定義乙個char型別,乙個int型別,給int資料賦值為1,根據char的值是否為1就可以判斷大小端了 若char型別為1,則為小端 若char型別不為1,則為大端 判斷大小端 static bool islocalhostbigendian void num num....

判斷大端小端模式

試題1 請寫乙個 c函式,若處理器是 big endian 的,則返回 0 若是 little endian 的,則返回1 解答 int checkcpu c c.a 1 return c.b 1 剖析 嵌入式系統開發者應該對 little endian 和big endian 模式非常了解。採用 ...