網路程式設計 位元組序

2021-10-08 22:16:14 字數 2147 閱讀 8213

三、位址形式的轉換函式

當儲存多位元組資料時,就涉及到位元組序的概念。高位位元組儲存在低位址為大端對齊,低位位元組儲存在低位址為小端對齊。

判斷系統為大端對齊還是小端對齊的方法:

#include

typedef

union

data;

intmain

(int argc,

char

*ar**)

else

if(ob.buf[0]

==0x02

&& ob.buf[1]

==0x01

)return0;

}

網路通訊為大端對齊。只有涉及到網路通訊時才需要考慮位元組序的問題,同一主機程序通訊不需要考慮。

#include

uint32_t htonl

(uint32_t hostint32)

;功能:

將32位主機位元組序資料轉換成網路位元組序資料

引數: hostint32:待轉換的32位主機位元組序資料

返回值:

成功:返回網路位元組序的值

#include

uint32_t ntohl

(uint32_t netint32)

;功能:

將32位網路位元組序資料轉換成主機位元組序資料

引數: uint32_t: unsigned

int netint32:待轉換的32位網路位元組序資料

返回值:

成功:返回主機位元組序的值

#include

uint16_t htons

(uint16_t hostint16)

;功能:

將16位主機位元組序資料轉換成網路位元組序資料

引數: uint16_t:unsigned

short

int hostint16:待轉換的16位主機位元組序資料

返回值:

成功:返回網路位元組序的值

#include

uint16_t ntohs

(uint16_t netint16)

;功能:

將16位網路位元組序資料轉換成主機位元組序資料

引數: uint16_t: unsigned

short

int netint16:待轉換的16位網路位元組序資料

返回值:

成功:返回主機位元組序的值

點分十進位制(字串):192.168.0.101 --> 四位元組資料

#include

intinet_pton

(int family,

const

char

*strptr,

void

*addrptr)

;功能:

將點分十進位制數串轉換成32位無符號整數

引數: family 協議族 af_inet

strptr 點分十進位制數串

addrptr 32位無符號整數的位址

返回值:

成功返回1 、 失敗返回其它

#include

const

char

*inet_ntop

(int family,

const

void

*addrptr,

char

*strptr, size_t len)

;功能:

將32位無符號整數轉換成點分十進位制數串

引數: family 協議族 af_inet

addrptr 32位無符號整數

strptr 點分十進位制數串

len strptr快取區長度

len的巨集定義

#define inet_addrstrlen 16

//for ipv4

#define inet6_addrstrlen 46

//for ipv6

返回值:

成功:則返回字串的首位址

失敗:返回null

網路程式設計 網路位元組序和位址位元組序轉化

網路位元組序是大端序,而記憶體位元組序是小端序 就像彙編學的內容一致 大端序 高位位元組存放到地位位址 小端序 高位位元組存放在高位位址 因此在位址傳輸時需要將位址進行轉化 short unsigned short htons unsigned short h to n,主機轉化成網路資料 s sh...

Linux網路程式設計 主機位元組序 與 網路位元組序

網域名稱轉換ip位址 首先需要理解大端模式與小端模式這兩個點 這兩種模式代表著資料在記憶體中是如何存放的,我們直到,乙個位元組能夠存放8位,如果是超過8位的資料該怎樣存放呢?如需要存放資料 0x12345678 不難看出,大端模式也就是高位優先存放,小端模式也就是低位優先存放。下面學習兩類函式 ht...

TCP IP網路程式設計之位元組序和網路位元組序

一 概要 二 簡介 在此之前我們需要了解清楚幾個概念。cpu架構 人們常說的x86 x64是一種架構,但是他有32位的和64位的。32位的叫x86 後來出現基於它的64位版,就叫x64。作業系統位數 64位的系統是基於64位處理器而來的,所以64位的系統能在64位的處理器上執行,但是不能在32的處理...