不同視角去理解字節(jié)序、比特序

關(guān)于字節(jié)序、比特序,相信已經(jīng)有很多文章來解釋這個事情,本文試圖從不同的視角解釋這件事情,包括人類閱讀者、計算機硬件、C語言開發(fā)者、TCP/IP網(wǎng)絡(luò)、JAVA開發(fā)者、編解碼開發(fā)者。

一、背景

這里再描述一下大端、小端字節(jié)序,如下圖示:

大端:存儲值的高位在低地址,存儲值的低位在高地址。比如0x01是該數(shù)字的最高字節(jié),但卻是存儲在0x100,最低的地址;0x67是該數(shù)字的最小值的字節(jié),存儲在0x103這個最高地址。

小端:存儲值的高位在高地址,存儲值的低位在低地址。

備注:地址的增長方向默認與人類閱讀方向一致,在圖中均為從左向右逐漸增大。

比特序和當前機器的字節(jié)序保持一致,如果字節(jié)序為大端,則比特序也是大端。

二、人類閱讀者視角

人類閱讀時,從左向右進行閱讀,所以先看到數(shù)字的高位,最后才能看到數(shù)字的低位。所以,人類的閱讀順序,天然是大端順序。

比如10進制數(shù)字1022,轉(zhuǎn)換為二進制是0x03FE,即

1022 = 3 * 16 * 16 + F * 16 + E =?3 * 16 * 16 + 15 * 16 + 14

0x03FE這種表述方式,就是大端順序,因為0x03作為高位,卻在低地址的一側(cè)。

所以,大端順序是更方便人類閱讀和表述的順序。

三、計算機硬件視角

如上圖所示,計算機硬件視角下,字節(jié)序由硬件決定,目前是:

x86 處理器為小端字節(jié)序;

部分Power等處理器為大端字節(jié)序;

ARM、部分Power處理器字節(jié)序可配置。

四、C語言開發(fā)者視角

因為C語言是非常底層的語言,會直接把內(nèi)存的實際字節(jié)排列返回給開發(fā)者,所以開發(fā)者需要根據(jù)判斷硬件的字節(jié)序,進行特定的處理

四、TCP/IP網(wǎng)絡(luò)視角

TCP/IP網(wǎng)絡(luò)的2端,可能會連接不同的硬件,比如客戶端是小端字節(jié)序,服務(wù)端是大端字節(jié)序,這時如果字節(jié)序不統(tǒng)一,則無法進行通信。所以,TCP/IP網(wǎng)絡(luò)中的比特序是固定的。

TCP/IP網(wǎng)絡(luò)中統(tǒng)一為大端字節(jié)序,但比特序為小端比特序。

其中,字節(jié)序的轉(zhuǎn)換,依賴不同的語言,可能需要由開發(fā)者去轉(zhuǎn)換,比如C語言中,在發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù)時需要調(diào)用htonl等函數(shù)進行字節(jié)序轉(zhuǎn)換。但JAVA語言不需要轉(zhuǎn)換。

比特序的轉(zhuǎn)換,則是由網(wǎng)卡完成的。

五、JAVA開發(fā)者視角

JAVA對字節(jié)序也進行了簡化,開發(fā)者看到的,統(tǒng)一為大端字節(jié)序。所以JAVA開發(fā)者輕松很多,只需要按人類正常閱讀的方式,處理字節(jié)序就可以了

六、編解碼開發(fā)者視角

對于編解碼的開發(fā)者,是直接接觸字節(jié)序和位序的使用者。

比如字段A,在編碼協(xié)議中,定義為int10,即類型為int,長度為10個bit。如果協(xié)議中對某些字段未明確指定字節(jié)序,則一般為大端字節(jié)序,因為最符合人類的閱讀方式。

比如數(shù)字300,類型為int10,16進制表示為0x12C,即0x01和0x2C。則編碼時,

1.寫入0x01,占用2位

2.寫入0x2C,占用8位

真實的存儲排布為0x012C

參考文章:

1.https://blog.csdn.net/frank_jb/article/details/79027711

2.https://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F

3.https://en.wikipedia.org/wiki/Endianness#Endianness_in_networking

4.http://www.ruanyifeng.com/blog/2016/11/byte-order.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容