概述
機(jī)器是分大小端的羽历,這對我們編程有什么影響呢焊虏?什么又是大小端呢?也許我們很多時候都不清楚秕磷,但仍然可以很好地使用電腦诵闭,或者編寫代碼。但我認(rèn)為《圣經(jīng)》里有句話說得很好澎嚣,“你應(yīng)該了解真相疏尿,真相會使你自由”。
所以這次易桃,我要揭開“字節(jié)端”的面紗褥琐,共享科學(xué)之美。
小故事
Jonathan swift在1726年寫的諷刺小說《格列佛游記》颈抚,小人國的內(nèi)戰(zhàn)就源于吃水煮雞蛋時究竟是從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開踩衩,由此曾發(fā)生6次叛亂,其中一個皇帝送了命贩汉,另一個丟了皇位驱富。
這就是Endian的由來。
大小端應(yīng)用領(lǐng)域
各個體系的計(jì)算機(jī)通常采用的字節(jié)存儲機(jī)制主要有兩種:大端(Big-Endian)和小端(Little-Endian)
匹舞。
Little-Endian主要用于現(xiàn)在的pc機(jī)上褐鸥,比如Intel的x86系列;Big-Endian主要指PowerPC系列處理器赐稽。
另外叫榕,目前的TCP/IP網(wǎng)絡(luò)及Java虛擬機(jī)的字節(jié)序都是Big-Endian的,這意味著如果通過網(wǎng)絡(luò)傳輸0x12345678這個整型變量姊舵,首先被發(fā)送的應(yīng)該是0x12晰绎,接著0x34,0x56,0x78。所以我們的程序在處理網(wǎng)絡(luò)流的時候括丁,必須注意字節(jié)序的問題荞下。
大小端原理
MSB:Most Significant Bit/Byte
,譯為最重要的位或最重要的字節(jié)。
用來表明在一個bit序列(1byte是8個bit組成的序列)或一個byte序列(1word是2個byte組成的序列)中對整個序列取值影響最大的那個bit/byte尖昏。
LSB:Least Significant Bit/Byte
仰税,譯為最不重要的位或最不重要的字節(jié)。
用來表明在一個bit序列(1byte是8個bit組成的序列)或一個byte序列(1word是2個byte組成的序列)中對整個序列取值影響最小的那個bit/byte抽诉。
舉個栗子
一個十六進(jìn)制的整數(shù):0x12345678
0x12就是MSB陨簇,0x78就是LSB。
而對于0x78這個字節(jié)迹淌,它的二進(jìn)制值0x01111000河绽,那么最左邊的0就是MSB,最右邊0就是LSB巍沙。
Big-Endian
Big-Endian其實(shí)就是規(guī)定MSB在存儲時放在低地址葵姥,在傳輸時MSB放在流的開始;
LSB存儲時放在高地址句携,在傳輸時放在流的末尾榔幸。
Little-Endian
Little-Endian其實(shí)就是規(guī)定MSB在存儲時放在高地址,在傳輸時MSB放在流的末尾矮嫉;
LSB存儲時放在低地址削咆,在傳輸時放在流的開始。
舉個栗子
0x12345678
Big-Endian
地址0:0x12蠢笋;地址1:0x34拨齐;地址2:0x56;地址3:0x78
Little-Endian
地址0:0x78昨寞;地址1:0x56瞻惋;地址2:0x34;地址3:0x12
總結(jié)
其實(shí)大小端很簡單只需了解幾點(diǎn):
- 大小端是由硬件決定的援岩,小端主要是x86處理器歼狼,大端主要是PowerPC;
- 大小端是一種字節(jié)存儲機(jī)制享怀;
- 大端是最重要的字節(jié)存儲在低地址羽峰;
- 小端是最重要的字節(jié)存儲在高地址。