大小端的問題剖析:
嵌入式系統開發者應該對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
我們常用的x86結構是小端模式,而keil c51則為大端模式。很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。
以下這段**可以用來判斷當預處理器的大小端模式
#include
void main()
test =;
int i=0;
for(i=0;iprintf("test.j[%d] = 0x%x\n",i,test.j[i]);
}if(*p == 1)
else
}執行結果:
test.j[0] = 0xffffffef
test.j[1] = 0xffffffbe
test.j[2] = 0xffffffad
test.j[3] = 0xffffffde
little endian
大小端儲存問題,如果小端方式中(a 佔至少兩個位元組的長度)則 a 所分配的記憶體最小位址那個位元組中就存著1,其他位元組是0.大端的話則1在 a 的最高位址位元組處存放,char是乙個位元組,所以強制將char型量p指向a則p指向的一定是a的最低位址,那麼就可以判斷p中的值是不是1來確定是不是小端。
判斷大小端模式
學c語言時,了解過大小端模式,但是一直都每怎麼理解,對於網上查到的各種判斷大小端的程式也是看的一知半解。最近再次看到大小端這個問題時,終於感覺頓悟了。以下是我的理解,如有錯的地方請指出。大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中。小端模式,是指資料的高...
CPU的大小端模式以及判斷方法
不同體系結構的cpu,資料在記憶體中存放的排列順序是不一樣的。儲存器中對資料的儲存是以位元組 byte 為基本單位的,因此,字 word 和半字 half word 在儲存器中就有兩種次序,分別稱為 大端模式 big endian 和小端模式 little endian 大端儲存模式是指字或半字的最...
判斷系統大小端模式
端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭 big endi...