摘要:什么是字節(jié)序字節(jié)序,顧名思義就是字節(jié)的順序。因此,單字節(jié)的數(shù)據(jù)如或的類型的數(shù)據(jù)沒有字節(jié)序這一說,因?yàn)楂@取它只需要讀取一個(gè)字節(jié)。主機(jī)序機(jī)器的字節(jié)序,有大端模式也有小端模式,根據(jù)具體機(jī)器的處理決定的,小端模式較常見。
1、什么是字節(jié)序
字節(jié)序,顧名思義就是字節(jié)的順序。更具體的講,它是多字節(jié)數(shù)據(jù)存儲(chǔ)和傳輸時(shí),字節(jié)的順序。
2、為什么有“字節(jié)序”這個(gè)東西?因?yàn)槲锢韮?nèi)存是以字節(jié)為單位進(jìn)行數(shù)據(jù)存儲(chǔ),也就是我們常說的計(jì)算機(jī)基本單位為字節(jié)。
因此,單字節(jié)的數(shù)據(jù)(如c或java的char類型的數(shù)據(jù))沒有字節(jié)序這一說,因?yàn)楂@取它只需要讀取一個(gè)字節(jié)。而多字節(jié)數(shù)據(jù),由于有多個(gè)字節(jié),所以在存儲(chǔ)和傳輸可以使用不同的順序進(jìn)行操作。
十六進(jìn)制數(shù) 0x12345678 共占4個(gè)字節(jié),分別是0x12、0x34、0x56、0x78,因此在該數(shù)字中0x12屬于高位數(shù)據(jù),0x78屬于地位數(shù)據(jù)。
注:
可以把內(nèi)存看成是一個(gè)很大的數(shù)組,4G內(nèi)存則是一個(gè)長(zhǎng)度為4294967296的數(shù)組。
該數(shù)組的索引其實(shí)就是內(nèi)存地址,左邊是比較小的地址,右邊則越來越大,直至最大值。
第一種順序:低地址存放高位數(shù)據(jù),叫大端模式
第二種順序:低地址存放低位數(shù)據(jù),叫小端模式
兩者,大端模式比較符合人類的閱讀習(xí)慣;小端模式更符合計(jì)算機(jī)的處理方式,因?yàn)橛?jì)算機(jī)從低位開始處理。
4、大小端的應(yīng)用場(chǎng)景。網(wǎng)絡(luò)序:也稱為網(wǎng)絡(luò)字節(jié)序,都是大端模式。因?yàn)門CP/IP協(xié)議對(duì)各層協(xié)議統(tǒng)一規(guī)定采用大端模式。
主機(jī)序:機(jī)器的字節(jié)序,有大端模式也有小端模式,根據(jù)具體機(jī)器的處理決定的,小端模式較常見。
那么,在進(jìn)行網(wǎng)絡(luò)通訊時(shí),在將本地?cái)?shù)據(jù)發(fā)送到網(wǎng)絡(luò)上就需要注意這個(gè)順序。如果本地機(jī)器的字節(jié)序是小端模式,則需要先轉(zhuǎn)換成大端模式后再進(jìn)行發(fā)送;如果本地已經(jīng)是大端模式,則可以直接發(fā)送。
ps.在私有協(xié)議上的數(shù)據(jù),只要收發(fā)兩端約定好,用什么順序都行。不過,還是建議用網(wǎng)絡(luò)序發(fā)送。
5、如何判斷主機(jī)序int main() { int x = 0x1020304; char* p = (char*)&x; if(p[0]==1){ printf("Big "); } else{ printf("Little "); } return 0; }6、Java設(shè)置大小端
public class HelloEndian { public static void main(String[] args) { ByteBuffer b = ByteBuffer.wrap(new byte[4]); b.order(ByteOrder.BIG_ENDIAN); b.putInt(0x01020304); System.out.println("Big-Endian: " + Arrays.toString(b.array())); b = ByteBuffer.wrap(new byte[4]); b.order(ByteOrder.LITTLE_ENDIAN); b.putInt(0x01020304); System.out.println("Little-Endian: " + Arrays.toString(b.array())); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/71540.html
摘要:中有兩個(gè)函數(shù)和,很多在實(shí)際項(xiàng)目中從來沒有使用過,甚至也不知道這兩個(gè)方法是用來干嘛的。比如和分別對(duì)應(yīng)的二進(jìn)制表示為。主機(jī)字節(jié)序表示當(dāng)年機(jī)器的字節(jié)序也就是網(wǎng)絡(luò)字節(jié)序是確定的,而主機(jī)字節(jié)序是依機(jī)器確定的,一般為小端字節(jié)序。 PHP中有兩個(gè)函數(shù)pack和unpack,很多PHPer在實(shí)際項(xiàng)目中從來沒有使用過,甚至也不知道這兩個(gè)方法是用來干嘛的。這篇文章來為大家介紹一下它倆到底是用來干啥的。 p...
摘要:閑談系列不涉及具體的講解,只會(huì)勾勾畫畫一些自己認(rèn)為比較重要的特性。我們一般認(rèn)為用兩個(gè)字節(jié)位表示,并且完全囊括了字符集。將其轉(zhuǎn)換成進(jìn)制就是只是表示它們是碼。三的讀取和寫入相關(guān)重要的只有能夠讀寫,才能夠顯示其存在的價(jià)值。 原文地址:http://www.cnblogs.com/DeanCh... 在剛接觸Nodejs的時(shí)候,有些概念總讓學(xué)前端的我感到困惑(雖然大學(xué)的時(shí)候也是在搞后端,世界上...
摘要:以和為例,說明中的數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。對(duì)象用來表示通用的固定長(zhǎng)度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)。中的數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)對(duì)和有了一個(gè)大概的了解,下面讓我們來看下它是如何進(jìn)行二進(jìn)制數(shù)據(jù)操作的。 概述 本文主要通過對(duì)JavaScript中數(shù)字?jǐn)?shù)據(jù)與二進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換,讓讀者能夠了解在JavaScript中如何對(duì)數(shù)字類型(包括但不限于Number類型)進(jìn)行處理。 二進(jìn)制數(shù)據(jù)在日常...
摘要:數(shù)據(jù)的存儲(chǔ)前言數(shù)據(jù)類型匯總整型家族浮點(diǎn)型家族自定義類型指針類型。整型家族注在之后的標(biāo)準(zhǔn)規(guī)定,將類型數(shù)據(jù)劃分為整型家族,因?yàn)樽址趦?nèi)存中會(huì)將其轉(zhuǎn)化為碼值進(jìn)行存儲(chǔ)。 ...
摘要:鑒于文件讀寫網(wǎng)絡(luò)編程,或者說字節(jié)流處理的重要性,掌握這兩個(gè)函數(shù)是邁向高級(jí)編程的基礎(chǔ)。相比之下字節(jié)處理門庭冷落,相關(guān)函數(shù)寥寥無幾。上述是函數(shù)簡(jiǎn)單的使用場(chǎng)景,接下來分別介紹和函數(shù)。如其名,函數(shù)的工作是將數(shù)據(jù)按照格式打包成字節(jié)數(shù)組。 轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/php-pack-a... PHP有兩個(gè)重要的冷門函數(shù):pack和unpack。在網(wǎng)絡(luò)編程,讀寫圖像...
閱讀 3473·2023-04-26 02:48
閱讀 1468·2021-10-11 10:57
閱讀 2493·2021-09-23 11:35
閱讀 1201·2021-09-06 15:02
閱讀 3300·2019-08-30 15:54
閱讀 1617·2019-08-30 15:44
閱讀 883·2019-08-30 15:44
閱讀 992·2019-08-30 12:52