Posted on 2006-11-07 13:29
nemo 閱讀(4857)
評(píng)論(4) 編輯 收藏
今天研究SHA-1算法源碼,發(fā)現(xiàn)注釋中一個(gè)詞怎么也搞不懂:Big-Endian. 在網(wǎng)上查了才知道是大端在前的意思。在http://blog.vckbase.com/smileonce/archive/2005/02/22/3202.aspx?和 http://blog.myrice.com/reddenedmaple/archives/50001922.html中有比較多地介紹。但是很亂,我整理了一下,并加入了自己的一些理解。感謝提供信息的人們。
這兩個(gè)術(shù)語(yǔ)來(lái)自于?Jonathan?Swift?的《《格利佛游記》其中交戰(zhàn)的兩個(gè)派別無(wú)法就應(yīng)該從哪一端--小端還是大端--打開一個(gè)半熟的雞蛋達(dá)成一致。
在那個(gè)時(shí)代,Swift是在諷刺英國(guó)和法國(guó)之間的持續(xù)沖突,Danny?Cohen,一位網(wǎng)絡(luò)協(xié)議的早期開創(chuàng)者,第一次使用這兩個(gè)術(shù)語(yǔ)來(lái)指代字節(jié)順序,后來(lái)這個(gè)術(shù)語(yǔ)被廣泛接納了,成為計(jì)算機(jī)專用名詞。除網(wǎng)絡(luò)傳輸之外,在計(jì)算機(jī)硬件中也有使用,通常表示邏輯最小處理單元大于物理最小處理單元時(shí)邏輯單元與物理單元的映射方式。
由于這個(gè)概念第一次提出時(shí)是來(lái)指代字節(jié)順序,而且計(jì)算機(jī)物理最小處理單元通常為一個(gè)字節(jié),所以通常情況下無(wú)論是大端還是小端都是以字節(jié)(8bit)計(jì),在字節(jié)之內(nèi)都是以大端順序排列。但不排除以后隨著計(jì)算機(jī)的發(fā)展將這個(gè)數(shù)字?jǐn)U充。
字節(jié)排序 | 含義 |
---|
Big-Endian | 高位在前,低位在后。 |
Little-Endian | 低位在前,高位在后 |
請(qǐng)看下面這個(gè)例子:
如果我們將0x1234abcd寫入到以0x0000開始的內(nèi)存中,則結(jié)果為
??????????????? big-endian???? little-endian
0x0000???? 0x12????????????? 0xcd
0x0001???? 0x34????????????? 0xab
0x0002???? 0xab????????????? 0x34
0x0003???? 0xcd????????????? 0x12
然后,假如需要從內(nèi)存中取32位整數(shù)0x1234abcd中的高16位整數(shù),就需要知道是不是big-endian,如果是,需要從0x0002地址中去取,如果是little-endian,則需要從0x0000中取。也即怎么存就怎么取。
為什么會(huì)出現(xiàn)這樣的情況呢?為什么要有這兩種方式來(lái)排列數(shù)據(jù)?我們可以看看Dr. William T. Verts所作的說(shuō)明: