网络通信之 字节序转换原理与网络字节序、大端和小端模式
生活随笔
收集整理的這篇文章主要介紹了
网络通信之 字节序转换原理与网络字节序、大端和小端模式
小編覺得挺不錯的,現(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式中断服务函数的一些特点
- 下一篇: 同步中断和异步中断区别