當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 計(jì)算機(jī)中的大小端存儲(chǔ)
在講C語言的時(shí)候,有講到大小端的內(nèi)容,這里呢對(duì)大小端的相關(guān)內(nèi)容進(jìn)行了整理,有需要的可以參考一下!
大端和小端來自一個(gè)小故事:端模式(Endian)的這個(gè)詞出自Jonathan Swift書寫的《格列佛游記》。這本書根據(jù)將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為Big Endian,從尖頭開始將雞蛋敲開的人被歸為L(zhǎng)ittile Endian。小人國的內(nèi)戰(zhàn)就源于吃雞蛋時(shí)是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開。在計(jì)算機(jī)業(yè)Big Endian和Little Endian也幾乎引起一場(chǎng)戰(zhàn)爭(zhēng)。
在內(nèi)存中,數(shù)據(jù)是以字節(jié)(8bit)存儲(chǔ)的,當(dāng)存儲(chǔ)16bit的int或者32bit的long(與操作系統(tǒng)有關(guān)),就面臨著大端 (Big-Endian) 存儲(chǔ)還是小端 (Little-Endian) 存儲(chǔ)的問題。下面解釋一下大端存儲(chǔ)和小端存儲(chǔ)的概念。
大端存儲(chǔ):高字節(jié)存儲(chǔ)在低地址中,即高位先存;
小端存儲(chǔ):低字節(jié)存儲(chǔ)在高地址中,即低位先存。
其實(shí)這兩個(gè)概念不難理解,但是比較容易記混。由于大端序和小端序都是從存儲(chǔ)器的低地址開始向高地址存儲(chǔ)數(shù)據(jù),不同的是一個(gè)字?jǐn)?shù)據(jù)中先存高字節(jié)還是先存低字節(jié)。可以記住這樣一個(gè)口訣:“高大低小”。“高”是指高字節(jié),“大”是指大端序,“低”是指低字節(jié),“小”是指小端序,“高大低小”也即先存高字節(jié)為大端序,先存低字節(jié)為小端序。
舉個(gè)例子說明這個(gè)問題:
位寬為32bit的CPU,要存儲(chǔ)的字?jǐn)?shù)據(jù)為0x12345678,起始地址為0x4000。
大端存儲(chǔ)如下:
小端存儲(chǔ)如下:
一般地,Intel系列的CPU采用小端存儲(chǔ),KEIL C51則為大端存儲(chǔ)。 同時(shí),在網(wǎng)絡(luò)傳輸中,網(wǎng)絡(luò)協(xié)議需要指定網(wǎng)絡(luò)字節(jié)順序,TCP/IP協(xié)議中使用16位整數(shù)和32位整數(shù)的高位先存模式,對(duì)應(yīng)我們的大端模式。
以上就是計(jì)算機(jī)中的大小端的存儲(chǔ)模式。