一、Big-endian & Little-endian
還是Wikipedia好??!可惜中文的國(guó)內(nèi)看不了,愚昧??!實(shí)在覺(jué)得中文有點(diǎn)難懂,看看日本語(yǔ)版本吧: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),說(shuō)來(lái)挺無(wú)關(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也方便啊,無(wú)非是左移和右移的區(qū)別而已,但little-endian的優(yōu)勢(shì)在于unsigned char/short/int/long類型轉(zhuǎn)換時(shí),存儲(chǔ)位置無(wú)需改變。
在網(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):
(忽然整出來(lái)一句)Y:聽(tīng)過(guò)鷹的故事沒(méi)有?
(滿臉疑惑)Fox:沒(méi)有。
Y:一只小鷹掉到雞窩里,#$@%……
F:我不是鷹,我就是一只雞,做技術(shù)雞有什么不好?
Y:做技術(shù)沒(méi)有不好啊……
F:我不是說(shuō)做技術(shù),我說(shuō)做雞,我就是在地上走的,我為什么總是要抬頭看天?
Y:你要往上看,沒(méi)有人注定不能飛,XX以前也沒(méi)有想過(guò)有一天會(huì)飛起來(lái)。
F:我不是掉到雞窩里,我本來(lái)就在雞窩里,我也喜歡呆在雞窩里,別人都在地上走,我為什么要飛起來(lái)?
Y:你總要飛起來(lái)。
F:我說(shuō)了我喜歡呆在雞窩里,你見(jiàn)過(guò)有那只雞飛起來(lái)了?
Y:……
F:我就是一只雞,插了雞翅還是飛不起來(lái),況且,我對(duì)飛起來(lái)也沒(méi)有任何興趣。
Y:……
F:做雞有什么不好?
Y:你看老毛,與人斗其樂(lè)無(wú)窮,他境界多高,與天斗其樂(lè)無(wú)窮,知道吧,他已經(jīng)不屑與人斗了。
F:我不喜歡與人斗,我也斗不過(guò),做雞有什么不好?
Y:……