大端、小端字節(jié)順序

參考1晃酒,參考2, ? 參考3

1.人類習(xí)慣讀寫大端字節(jié)序表牢,比如,十進(jìn)制 12345贝次,先讀高位再到低位崔兴;計算機(jī)電路先處理低位字節(jié),效率比較高,因為計算都是從低位開始的敲茄。所以位谋,計算機(jī)的內(nèi)部處理都是小端字節(jié)序。

2.計算機(jī)系統(tǒng)一般采用字節(jié)(Octet, 8 bit Byte)作為邏輯尋址單位堰燎。當(dāng)物理單位的長度大于1個字節(jié)時掏父,就要區(qū)分字節(jié)順序(Byte Order, orEndianness)。常見的字節(jié)順序有兩種:Big Endian(High-byte first)和Little Endian(Low-byte first)秆剪,常用的Intel X86(結(jié)構(gòu))平臺赊淑,以及ARM,DSP采用小端模式仅讽,而PowerPC處理器則采用了大端模式


3.從系統(tǒng)的角度理解端模式

處理器在硬件上由于端模式問題在設(shè)計中有所不同陶缺。從系統(tǒng)的角度上看,端模式問題對軟件和硬件的設(shè)計帶來了不同的影響何什,當(dāng)一個處理器系統(tǒng)中大小端模式同時存在時组哩,必須要對這些不同端模式的訪問進(jìn)行特殊的處理。

? ? ? ?PowerPC處理器主導(dǎo)網(wǎng)絡(luò)市場处渣,可以說絕大多數(shù)的通信設(shè)備都使用PowerPC處理器進(jìn)行協(xié)議處理和其他控制信息的處理伶贰,這也可能也是在網(wǎng)絡(luò)上的絕大多數(shù)協(xié)議都采用大端編址方式的原因。因此在有關(guān)網(wǎng)絡(luò)協(xié)議的軟件設(shè)計中罐栈,使用小端方式的處理器需要在軟件中處理端模式的轉(zhuǎn)變黍衙。而Pentium主導(dǎo)個人機(jī)市場,因此多數(shù)用于個人機(jī)的外設(shè)都采用小端模式荠诬,包括一些在網(wǎng)絡(luò)設(shè)備中使用的PCI總線琅翻,F(xiàn)lash等設(shè)備,這也要求在硬件設(shè)計中注意端模式的轉(zhuǎn)換柑贞。

4.常見的字節(jié)序

一般操作系統(tǒng)都是小端方椎,而通訊協(xié)議是大端的。

1)常見CPU的字節(jié)序

Big Endian : PowerPC钧嘶、IBM棠众、Sun

Little Endian : x86、DEC

ARM既可以工作在大端模式有决,也可以工作在小端模式闸拿。

2)常見文件的字節(jié)序

Adobe PS – Big Endian

BMP – Little Endian

DXF(AutoCAD) – Variable

GIF – Little Endian

JPEG – Big Endian

MacPaint – Big Endian

RTF – Little Endian

另外,Java和所有的網(wǎng)絡(luò)通訊協(xié)議都是使用Big-Endian的編碼书幕。

5.網(wǎng)絡(luò)字節(jié)序 Network Order(即大端)

TCP/IP各層協(xié)議將字節(jié)序定義為Big-Endian新荤,因此TCP/IP協(xié)議中使用的字節(jié)序通常稱之為網(wǎng)絡(luò)字節(jié)序;

主機(jī)序 Host Orader(即小端)

它遵循Little-Endian規(guī)則台汇。所以當(dāng)兩臺主機(jī)之間要通過TCP/IP協(xié)議進(jìn)行通信的時候就需要調(diào)用相應(yīng)的函數(shù)進(jìn)行主機(jī)序(Little-Endian)和網(wǎng)絡(luò)序(Big-Endian)的轉(zhuǎn)換苛骨。

htonl() ? ? //32位無符號整型的主機(jī)字節(jié)順序到網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換(小端->>大端)

htons() ? ? //16位無符號短整型的主機(jī)字節(jié)順序到網(wǎng)絡(luò)字節(jié)順序的轉(zhuǎn)換 ?(小端->>大端)

ntohl() ? ? //32位無符號整型的網(wǎng)絡(luò)字節(jié)順序到主機(jī)字節(jié)順序的轉(zhuǎn)換 ?(大端->>小端)

ntohs() ? ? //16位無符號短整型的網(wǎng)絡(luò)字節(jié)順序到主機(jī)字節(jié)順序的轉(zhuǎn)換 ?(大端->>小端)


6.C++怎樣判別大端小端

1.使用宏的方法:

const int endian =1;

#defineis_bigendian() ( (*(char*) &endian) == 0 )

#defineis_littlendbian() ( (*(char*) &endian) == 1 )


2.聯(lián)合體:

boolIsLittleEndian()

{

union

{????

longval;

charChar[sizeof(long)];

}u;

//????1-小端(Intel);????0-大端(Motor)

u.val?=1;

if(?u.Char[0]?==1)

{

//?小端

returntrue;

}??

elseif(?u.Char[sizeof(long)-1]?==1)

{

//?大端

returnfalse;

}?

throw("Unknown!");

7.如何手算主機(jī)字節(jié)順序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)順序篱瞎?

假設(shè)某16位的整數(shù),主機(jī)字節(jié)順序的值是21智袭,那么它的網(wǎng)絡(luò)字節(jié)順序是多少奔缠?

解決的步驟是:

1、將21化成二進(jìn)制吼野,二進(jìn)制,如果不足16位就在其前面補(bǔ)0两波,補(bǔ)滿16位瞳步。

21轉(zhuǎn)換成二進(jìn)制是:10101,在它前面補(bǔ)0腰奋,補(bǔ)滿16位后就得到:

00000000#00010101

2单起、將這個16位二進(jìn)制字符平分成兩段,每段8位

0000000 000010101 == > 00000000#00010101

3劣坊、顛倒這兩段的順序嘀倒,然后去掉第一個字符“1”前面的0,化成十進(jìn)制就得到了網(wǎng)絡(luò)字節(jié)順序的值了局冰。

00000000#00010101顛倒后:00010101#00000000

即00 01 01 01 00 000000

去掉第一個“1”前面的0得到:10 10 10 00 00 00 0

化成十進(jìn)制得到:5376

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末测蘑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子康二,更是在濱河造成了極大的恐慌碳胳,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沫勿,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)眼姐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門檩奠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔓挖,你說我怎么就攤上這事夕土。” “怎么了时甚?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵隘弊,是天一觀的道長。 經(jīng)常有香客問我荒适,道長梨熙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任刀诬,我火速辦了婚禮咽扇,結(jié)果婚禮上邪财,老公的妹妹穿的比我還像新娘。我一直安慰自己质欲,他們只是感情好树埠,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘶伟,像睡著了一般怎憋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上九昧,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天绊袋,我揣著相機(jī)與錄音,去河邊找鬼铸鹰。 笑死癌别,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹋笼。 我是一名探鬼主播展姐,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剖毯!你這毒婦竟也來了圾笨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤速兔,失蹤者是張志新(化名)和其女友劉穎墅拭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涣狗,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谍婉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镀钓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穗熬。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丁溅,靈堂內(nèi)的尸體忽然破棺而出唤蔗,到底是詐尸還是另有隱情,我是刑警寧澤窟赏,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布妓柜,位于F島的核電站,受9級特大地震影響涯穷,放射性物質(zhì)發(fā)生泄漏棍掐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一拷况、第九天 我趴在偏房一處隱蔽的房頂上張望作煌。 院中可真熱鬧掘殴,春花似錦、人聲如沸粟誓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹰服。三九已至病瞳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間获诈,已是汗流浹背仍源。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留舔涎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓逗爹,卻偏偏與公主長得像亡嫌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掘而,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容