大端模式小端模式以及網路位元組序

2022-03-26 22:32:52 字數 1228 閱讀 7190

大端模式小端模式以及網路位元組序

主機位元組序有兩種:大端模式和小端模式

不同的cpu有不同的主機位元組序型別。

ø  典型的使用小端儲存的cpu有:intel x86和arm 

ø  典型的使用大端儲存cpu有:power pc、mips unix和hp-paunix。

網路位元組序類似於大端模式,注意是類似,為什麼?

因為udp/tcp/ip協議規定:把接收到的第乙個位元組當作高位位元組看待,類似於大端模式低位址存放高位元組的儲存方式,實際上也確實像,因為無論是收還是發,都是從低位元組開始的,那麼收到的第乙個位元組理應放到低位址。

在進行網路通訊時是否需要進行位元組序轉換?

相同位元組序的平台在進行網路通訊時可以不進行位元組序轉換,但是跨平台進行網路資料通訊時必須進行位元組序轉換。

原因如下:網路協議規定接收到得第乙個位元組是高位元組,存放到低位址,所以傳送時會首先去低位址取資料的高位元組。小端模式的多位元組資料在存放時,低位址存放的是低位元組,而被傳送方網路協議函式傳送時會首先去低位址取資料(想要取高位元組,真正取得是低位元組),接收方網路協議函式接收時會將接收到的第乙個位元組存放到低位址(想要接收高位元組,真正接收的是低位元組),所以最後雙方都正確的收發了資料。而相同平台進行通訊時,如果雙方都進行轉換最後雖然能夠正確收發資料,但是所做的轉換是沒有意義的,造成資源的浪費。而不同平台進行通訊時必須進行轉換,不轉換會造成錯誤的收發資料,位元組序轉換函式會根據當前平台的儲存模式做出相應正確的轉換,如果當前平台是大端,則直接返回不進行轉換,如果當前平台是小端,會將接收到得網路位元組序進行轉換。 

舉個例子:

x86和powerpc通過tcp/ip協議通訊。

x86定義int a = 0x12345678。在呼叫write函式傳送的時候先從低位址開始發(即&a),傳送4個位元組,即78->56->34->12的順序。在ppc端接收的時候,很明顯會先收到78,順序是78->56->34->12,收到的78會被放到低位址中,依次類推,12會被放到最高位址裡。但是因為ppc是大端模式,ppc會認為12是低位元組,78是高位元組,所以ppc解析出來的這個數是0x78563412。可以看出來,其實網路通訊並沒有改變這個數的儲存方式,它只是遵循簡單的先進先出規則,誰先進去誰就先出來。具體到tcp協議內部他認為先讀進來的是高位元組等等,其實都是無關緊要的,對應用層開發來說是透明的,根本不用關心它內部怎麼認為。應用層開發者只需要明確一點:0x12345678這個數之所以在x86中是0x12345678,而在ppc中是0x78563412僅僅是因為x86和ppc對這個數的解讀方式不一樣(大小端模式不一樣)導致的。

大端模式 小端模式與網路位元組序

1.概述 大端模式與小端模式指的是超過乙個位元組大小的資料在計算機記憶體中兩種不同的存放方式。如果將資料的高位,儲存在低位址,則為大端模式 big endian 如果將資料的高位,儲存在高位址,則為小端模式 little endian 兩種存放方式並無明顯的優劣之分,但又同時存在於不同的計算機系統中...

大端模式與小端模式 網路位元組序與主機位元組序

大端模式與小端模式 三 大端小端轉換方法 big endian轉換成little endian如下 define bigtolittle16 a uint16 a 0xff00 8 uint16 a 0x00ff 8 define bigtolittle32 a uint32 a 0xff00000...

網路位元組序 大端 小端

1.小端法 little endian 就是低位位元組排放在記憶體的低位址端 即該值的起始位址 高位位元組排放在記憶體的高位址端 2.大端法 big endian 就是高位位元組排放在記憶體的低位址端 即該值的起始位址 低位位元組排放在記憶體的高位址端 網路上傳輸的資料都是位元組流,對於乙個多位元組...