|
1.故事的起源 “endian”這個詞出自《格列佛游記》。小人國的內(nèi)戰(zhàn)就源于吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發(fā)生過六次叛亂,其中一個皇帝送了命,另一個丟了王位。 我們一般將endian翻譯成“字節(jié)序”,將big endian和little endian稱作“大尾”和“小尾”。 2.什么是Big Endian和Little Endian? 在設計計算機系統(tǒng)的時候,有兩種處理內(nèi)存中數(shù)據(jù)的方法。一種叫為little-endian,存放在內(nèi)存中最低位的數(shù)值是來自數(shù)據(jù)的最右邊部分(也就是數(shù)據(jù)的最低位部分)。比如一個16進制數(shù)字0x12345678, 在內(nèi)存存放的方式如下:
另一種稱為big-endian,正好相反,存放在內(nèi)存中最低位的數(shù)值是來自數(shù)據(jù)的最左邊邊部分(也就是數(shù)據(jù)的最高為部分)。比如一個16進制數(shù)字0x12345678, 在內(nèi)存存放的方式如下:
比如某些文件需要在不同平臺處理,或者通過Socket通信。這方面我們可以借助ntohl(), ntohs(), htonl(), and htons()函數(shù)進行格式轉(zhuǎn)換。 3.如何判斷系統(tǒng)是Big Endian還是Little Endian? 在/usr/include/中(包括子目錄)查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER),確定其值。這個值一般在endian.h或machine/endian.h文件中可以找到,有時在feature.h中,不同的操作系統(tǒng)可能有所不同。一般來說,Little Endian系統(tǒng)BYTE_ORDER(或_BYTE_ORDER,__BYTE_ORDER)為1234,Big Endian系統(tǒng)為4321。大部分用戶的操作系統(tǒng)(如windows, FreeBsd,Linux)是Little Endian的。少部分,如MAC OS ,是Big Endian 的。本質(zhì)上說,Little Endian還是Big Endian與操作系統(tǒng)和芯片類型都有關系。 |
|
|