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