試題1:
請寫乙個
c函式,若處理器是
big_endian
的,則返回
0;若是
little_endian
的,則返回1
解答:
int checkcpu( )
c;
c.a = 1;
return(c.b ==1);
}
} 剖析:
嵌入式系統開發者應該對
little-endian
和big-endian
模式非常了解。採用
little-endian
模式的cpu 對運算元的存放方式是從低位元組到高位元組,而
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
的存放順序是所有成員都從低位址開始存放,面試者的解答利用該特性,輕鬆地獲得了
cpu 對記憶體採用
little-endian
還是big-endian
模式讀寫。
大端模式與小端模式判斷
在大端模式下,資料的msb存放在低位址 在小端模式下,資料的lsb 存放在低位址。一 大端與小端 msb與lsb 在嵌入式開發中,大端 big endian 和小端 little endian 是乙個很重要的概念。假如現有一32位int型數0x12345678,那麼其msb most signifi...
判斷大端小端
大端模式 big endian 和小端模式 little endian 在我們傳送資料的時候,我們首先要確定是大端還是小端模式來進行的,在接收方接收的資料必須知道資料是大端還是小端模式,才能正確地讀取和儲存資料起來,否則就會出錯。有些時候cpu公司用大端 c51微控制器 有些cpu用小端 arm 我...
大端小端判斷
聯合體是共享記憶體,在聯合體重定義乙個char型別,乙個int型別,給int資料賦值為1,根據char的值是否為1就可以判斷大小端了 若char型別為1,則為小端 若char型別不為1,則為大端 判斷大小端 static bool islocalhostbigendian void num num....