日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络通信之 字节序转换原理与网络字节序、大端和小端模式

發(fā)布時間:2024/10/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络通信之 字节序转换原理与网络字节序、大端和小端模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、在進行網(wǎng)絡(luò)通信時是否需要進行字節(jié)序轉(zhuǎn)換??

相同字節(jié)序的平臺在進行網(wǎng)絡(luò)通信時可以不進行字節(jié)序轉(zhuǎn)換,但是跨平臺進行網(wǎng)絡(luò)數(shù)據(jù)通信時必須進行字節(jié)序轉(zhuǎn)換。 原因如下:網(wǎng)絡(luò)協(xié)議規(guī)定接收到得第一個字節(jié)是高字節(jié),存放到低地址,所以發(fā)送時會首先去低地址取數(shù)據(jù)的高字節(jié)。小端模式的多字節(jié)數(shù)據(jù)在存放時,低地址存放的是低字節(jié),而被發(fā)送方網(wǎng)絡(luò)協(xié)議函數(shù)發(fā)送時會首先去低地址取數(shù)據(jù)(想要取高字節(jié),真正取得是低字節(jié)),接收方網(wǎng)絡(luò)協(xié)議函數(shù)接收時會將接收到的第一個字節(jié)存放到低地址(想要接收高字節(jié),真正接收的是低字節(jié)),所以最后雙方都正確的收發(fā)了數(shù)據(jù)。而相同平臺進行通信時,如果雙方都進行轉(zhuǎn)換最后雖然能夠正確收發(fā)數(shù)據(jù),但是所做的轉(zhuǎn)換是沒有意義的,造成資源的浪費。而不同平臺進行通信時必須進行轉(zhuǎn)換,不轉(zhuǎn)換會造成錯誤的收發(fā)數(shù)據(jù),字節(jié)序轉(zhuǎn)換函數(shù)會根據(jù)當前平臺的存儲模式做出相應(yīng)正確的轉(zhuǎn)換,如果當前平臺是大端,則直接返回不進行轉(zhuǎn)換,如果當前平臺是小端,會將接收到得網(wǎng)絡(luò)字節(jié)序進行轉(zhuǎn)換。

二、大端和小端

???? "大端"和"小端"表示多字節(jié)值的哪一端存儲在該值的起始地址處;小端存儲在起始地址處,即是小端字節(jié)序;大端存儲在起始地址處,即是大端字節(jié)序; 或者說: 1.小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端(即該值的起始地址),高位字節(jié)排放在內(nèi)存的高地址端; 2.大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端(即該值的起始地址),低位字節(jié)排放在內(nèi)存的高地址端; 舉個簡單的例子,對于整型數(shù)據(jù)0x12345678,它在大端法和小端法的系統(tǒng)中,各自的存放方式如下圖1所示:

三、網(wǎng)絡(luò)字節(jié)序

網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)都是字節(jié)流,對于一個多字節(jié)數(shù)值,在進行網(wǎng)絡(luò)傳輸?shù)臅r候,先傳遞哪個字節(jié)?也就是說,當接收端收到第一個字節(jié)的時候,它將這個字節(jié)作為高位字節(jié)還是低位字節(jié)處理,是一個比較有意義的問題; UDP/TCP/IP協(xié)議規(guī)定:把接收到的第一個字節(jié)當作高位字節(jié)看待,這就要求發(fā)送端發(fā)送的第一個字節(jié)是高位字節(jié);而在發(fā)送端發(fā)送數(shù)據(jù)時,發(fā)送的第一個字節(jié)是該數(shù)值在內(nèi)存中的起始地址處對應(yīng)的那個字節(jié),也就是說,該數(shù)值在內(nèi)存中的起始地址處對應(yīng)的那個字節(jié)就是要發(fā)送的第一個高位字節(jié)(即:高位字節(jié)存放在低地址處);由此可見,多字節(jié)數(shù)值在發(fā)送之前,在內(nèi)存中因該是以大端法存放的; 所以說,網(wǎng)絡(luò)字節(jié)序是大端字節(jié)序; 比如,我們經(jīng)過網(wǎng)絡(luò)發(fā)送整型數(shù)值0x12345678時,在80X86平臺中,它是以小端發(fā)存放的,在發(fā)送之前需要使用系統(tǒng)提供的字節(jié)序轉(zhuǎn)換函數(shù)htonl()將其轉(zhuǎn)換成大端法存放的數(shù)值;如下圖2所示:

總結(jié)

以上是生活随笔為你收集整理的网络通信之 字节序转换原理与网络字节序、大端和小端模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。