1. 程式人生 > >網路位元組序,大端機,小端機

網路位元組序,大端機,小端機

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

二、大端和小端
“大端”和”小端”表示多位元組值的哪一端儲存在該值的起始地址處;小端儲存在起始地址處,即是小端位元組序;大端儲存在起始地址處,即是大端位元組序; 或者說: 1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),高位位元組排放在記憶體的高地址端; 2.大端法(Big-Endian)就是高位位元組排放在記憶體的低地址端(即該值的起始地址),低位位元組排放在記憶體的高地址端; 舉個簡單的例子,對於整型資料0x12345678,它在大端法和小端法的系統中,各自的存放方式如下圖1所示:

這裡寫圖片描述
三、網路位元組序
網路上傳輸的資料都是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它將這個位元組作為高位位元組還是低位位元組處理,是一個比較有意義的問題; UDP/TCP/IP協議規定:把接收到的第一個位元組當作高位位元組看待,這就要求傳送端傳送的第一個位元組是高位位元組;而在傳送端傳送資料時,傳送的第一個位元組是該數值在記憶體中的起始地址處對應的那個位元組,也就是說,該數值在記憶體中的起始地址處對應的那個位元組就是要傳送的第一個高位位元組(即:高位位元組存放在低地址處);由此可見,多位元組數值在傳送之前,在記憶體中因該是以大端法存放的; 所以說,網路位元組序是大端位元組序; 比如,我們經過網路傳送整型數值0x12345678時,在80X86平臺中,它是以小端發存放的,在傳送之前需要使用系統提供的位元組序轉換函式htonl()將其轉換成大端法存放的數值;如下圖2所示:
這裡寫圖片描述

相關推薦

網路通訊之 位元組轉換原理與網路位元組大端模式

     原因如下:網路協議規定接收到得第一個位元組是高位元組,存放到低地址,所以傳送時會首先去低地址取資料的高位元組。小端模式的多位元組資料在存放時,低地址存放的是低位元組,而被髮送方網路協議函式傳送時會首先去低地址取資料(想要取高位元組,真正取得是低位元組),接收方網路協議函式接收時會將接收到的第一個位元

詳解Big-Endian和Little-Endian大端模式和模式

詳解大端模式和小端模式 一、大端模式和小端模式的起源         關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。戰爭的原因:大家都知道,吃雞蛋

網路程式設計套接字、網路位元組及用udp寫客戶和服務聊天程式

認識IP地址 IP協議有兩個版本:IPV4和IPV6。 IPV4:IPV4版本的IP地址是4位元組無符號整數。那麼就存在IP地址資源匱乏的時候,這時可以採用兩種方法: DHCP:ip地址動態分配(應用層協議); NAT: 地址替換; 但是這兩種方法只是暫時的有I

大端區別

問題 大端機和小端機的區別。 深入理解計算機系統裡面有如下的描述: 對於跨越多位元組的物件,我們必須建立兩個原則,這個物件的地址是什麼以及儲存器中如何排列這些位元組。對於第一個問題,幾乎在所有的機器上面,多位元組物件都被儲存為連續的位元組序列,因此物

使用C語言判斷一個機器是大端還是

1.什麼是大端,什麼是小端? 大端:資料的高位位元組存放在高地址內,資料的低位位元組存放在低地址內。 小端:資料的高位位元組存放在低地址內,資料的高位位元組存放在高地址內。 一個整型是4個位元組,如:0x1a2b3c4d。電腦讀取記憶體資料時,是從低位地址到高位地址進行

大端的判斷方法

int checkCPU() {  {   union w   {      int  a;    char b;   } c;   c.a = 1;   return (c.b == 1);  } } 剖析: 嵌入式系統開發者應該對Little-endian和Big-endian模式非

網路位元組大端

一、在進行網路通訊時是否需要進行位元組序轉換? 相同位元組序的平臺在進行網路通訊時可以不進行位元組序轉換,但是跨平臺進行網路資料通訊時必須進行位元組序轉換。 原因如下:網路協議

大端儲存和儲存網路位元組

一、大端、小端 "大端"和"小端"表示多位元組值的哪一端儲存在該值的起始地址處;小端儲存在起始地址處,即是小端位元組序;大端儲存在起始地址處,即是大端位元組序; 或者說: 1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址),高

位元組(Endian)大端(Big-Endian)(Little-Endian)

在各種計算機體系結構中,對於位元組、字等的儲存機制有所不同,因而引發了計算機通訊領域中一個很重要的問題,即通訊雙方交流的資訊單元(位元、位元組、字、雙字等等)應該以什麼樣的順序進行傳送。如果不達成一致的規則,通訊雙方將無法進行正確的編/譯碼從而導致通訊失敗。目前在各種體系的計算機中通常採用的位

大端 網路位元組說明

大端(Big-Endian)和小端(little-Endian)的起源 關於大端小端名詞的由來,有一個有趣的故事,來自於Jonathan Swift的《格利佛遊記》:Lilliput和Blefuscu這兩個強國在過去的36個月中一直在苦戰。 戰爭的原因:大家都知道,吃雞蛋的時候,原始的方法是打破

大端 && 網路位元組

(0)背景: 網路上的資料流是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它是將這個位元組作為高位還是低位來處理呢?  (1)網路位元組序定義: 收到的第一個位元組被當作高位看待,這就要求傳送端傳送的第

大端法、法、網路位元組

關於位元組序(大端法、小端法)的定義 《UNXI網路程式設計》定義:術語“小端”和“大端”表示多位元組值的哪一端(小端或大端)儲存在該值的起始地址。小端存在起始地址,即是小端位元組序;大端存在起始地址,即是大端位元組序。 也可以說:  1.小端法(Little-End

網路位元組 大端

1.小端法(Little-Endian)就是低位位元組排放在記憶體的低地址端(即該值的起始地址), 高位位元組排放在記憶體的高地址端; 2.大端法(Big-Endian)就是高位位元組排放在記憶體的低地址端(即該值的起始地址), 低位位元組排放在記憶體的高地址端;    

關於位元組大端網路位元組

1. 首先最要明確一點:位元組序是長度跨越多個位元組的資料被儲存的順序。 2. 其次要明確一點:資料的位元組高低是高在左,低在右,就跟數學裡邊一樣。 3. 再次要明確一點:計算機的地址高低是低在左,高在右(肉眼看時)。 4. 大端:高低高低,即資料的高位元組存在低地址,低位

一些基本問題:大小網路位元組socket程式設計函式的注意點gdb和coredump除錯

1,什麼是大小端?大小端是指資料在記憶體的的存放順序,現代計算機一次能夠載入32bit或者64bit的資料或者指令,因而資料的存放順序影響它被裝載到整數的值。以小端來講:低地址存資料的低位,高地址存資料的高;而大端敲好反過來:高地址存低位,地址存高位。2.測試大小端測試大小端

1.socket程式設計:socket程式設計網路位元組函式介紹IP地址轉換函式sockaddr資料結構網路套接字函式socket相關函式TCP server和client

 1Socket程式設計 socket這個詞可以表示很多概念: 在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識網路通訊中的一個程序,“IP 地址+埠號”就

需要注意位元組大端(big endian)和(little endian)的幾種情景

大端(big endian):在記憶體中,按照從最低有效位元組到最高有效位元組的順序儲存物件,即資料的高位元組,儲存在記憶體的低地址中,而資料的低位元組,儲存在記憶體的高地址中。 小端(littl

大端模式與模式、網路位元組順序與主機位元組順序(經典)

大端模式與小端模式 一、概念及詳解   在各種體系的計算機中通常採用的位元組儲存機制主要有兩種: big-endian和little-endian,即大端模式和小端模式。   先回顧兩個關鍵詞,MSB和LSB:   MSB:Most Significant Bit ---

判斷位元組大端位元組的C程式

編寫一個C程式,實現32位CPU中儲存方式小端位元組序和大端位元組序的判別。 ONE: #include<stdio.h> #define LBS 0 #define MBS 1 { int main(int) { int a=0x12345678; c

位元組問題--大端

一、位元組序定義 位元組序,顧名思義位元組的順序,再多說兩句就是大於一個位元組型別的資料在記憶體中的存放順序(一個位元組的資料當然就無需談順序的問題了)。 其實大部分人在實際的開發中都很少會直接和位元組序打交道。唯有在跨平臺以及網路程式中位元組序才是一個應該被考慮的問題。 在所有的介紹位元組序的文章