Posted on 2008-07-30 14:48
Fox 閱讀(2036)
評(píng)論(4) 編輯 收藏 引用 所屬分類:
T技術(shù)碎語
一、Big-endian & Little-endian
還是Wikipedia好啊!可惜中文的國(guó)內(nèi)看不了,愚昧啊!實(shí)在覺得中文有點(diǎn)難懂,看看日本語版本吧:D!
關(guān)于端(endianness)的介紹,Wikipedia上比較全了:http://en.wikipedia.org/wiki/Endianness
關(guān)于網(wǎng)絡(luò)字節(jié)序(network byte order)和主機(jī)字節(jié)序(host byte order),說來挺無關(guān)緊要的一點(diǎn)東西,因?yàn)槊看慰偸峭簦悦看味家闷娴目纯?strong>大端(big-endian)和小端(little-endian)。
給定unsigned long
型整數(shù)十六進(jìn)制形式:0x0A0B0C0D,其big-endian和little-endian形式分別為:
1) Big-endian
Memory
| ... | 8-bit atomic element size | ... | 16-bit atomic element size
| 0x0A | a | 0x0A0B | a
| 0x0B | a+1 | 0x0C0D | a+1
| 0x0C | a+2
| 0x0D | a+3
| ... |
2) Little-endian(X86)
Memory
| ... | 8-bit atomic element size | ... | 16-bit atomic element size
| 0x0D | a | 0x0C0D | a
| 0x0C | a+1 | 0x0A0B | a+1
| 0x0B | a+2
| 0x0A | a+3
| ... |
Mapping registers to memory locations (from Wikipedia)
為什么X86存儲(chǔ)會(huì)使用little-endian,起初我想對(duì)于位運(yùn)算,尤其是位移運(yùn)算,little-endian很方便,但轉(zhuǎn)念一想,big-endian也方便啊,無非是左移和右移的區(qū)別而已,但little-endian的優(yōu)勢(shì)在于unsigned char/short/int/long類型轉(zhuǎn)換時(shí),存儲(chǔ)位置無需改變。
在網(wǎng)絡(luò)傳輸中,采用big-endian序,對(duì)于0x0A0B0C0D,傳輸順序就是0A 0B 0C 0D,因此big-endian作為network byte order,little-endian作為host byte order。
________________________________________________
PS:做雞有什么不好?
上午跟某同事(為尊重慮,下文以Y稱之)躲在犄角旮旯抽煙。以下為場(chǎng)景再現(xiàn):
(忽然整出來一句)Y:聽過鷹的故事沒有?
(滿臉疑惑)Fox:沒有。
Y:一只小鷹掉到雞窩里,#$@%……
F:我不是鷹,我就是一只雞,做技術(shù)雞有什么不好?
Y:做技術(shù)沒有不好啊……
F:我不是說做技術(shù),我說做雞,我就是在地上走的,我為什么總是要抬頭看天?
Y:你要往上看,沒有人注定不能飛,XX以前也沒有想過有一天會(huì)飛起來。
F:我不是掉到雞窩里,我本來就在雞窩里,我也喜歡呆在雞窩里,別人都在地上走,我為什么要飛起來?
Y:你總要飛起來。
F:我說了我喜歡呆在雞窩里,你見過有那只雞飛起來了?
Y:……
F:我就是一只雞,插了雞翅還是飛不起來,況且,我對(duì)飛起來也沒有任何興趣。
Y:……
F:做雞有什么不好?
Y:你看老毛,與人斗其樂無窮,他境界多高,與天斗其樂無窮,知道吧,他已經(jīng)不屑與人斗了。
F:我不喜歡與人斗,我也斗不過,做雞有什么不好?
Y:……