網路位元組序

2021-09-29 13:09:42 字數 1021 閱讀 8199

tcp/ip協議規定,網路資料流應採用大端位元組序,即低位址高位元組。

為使網路程式具有可移植性,使同樣的c**在大端和小端計算機上編譯後都能正常執行,可以呼叫以下庫函式做網路位元組序和主機位元組序的轉換。

#include

unit32_t htonl

(uint32_t hostlong)

;unit16_t htons

(unit16_t hostshort)

;unit16_t ntohl

(unit32_t netlong)

;unit16_t ntohs

(unit16_t netshort)

;

h表示host,n表示network,l表示32位長整數,s表示16位短整數。

如果主機是小端位元組序,這些函式將引數做相應的大小端轉換然後返回,如果主機是大端位元組序,這些函式不做轉換,將引數原封不動地返回 。

192.168.1.24---------------->網路位元組序 inet_pton();

網路位元組序------------------->點分十進位制字串 inet_ntop();

#include

intinet_pton

(int af,

const

char

*src,

void

*dst)

;const

char

*inet_ntop

(int af,

const

void

*src,

char

*dst,socklen_t size)

;

支援ipv4和ipv6

可重入函式

其中inet_pton和inet_ntop不僅可以轉換ipv4的in_addr,還可以轉換ipv6的in6_addr。

因此函式介面是void *addrptr。

位元組序和網路位元組序

1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...

位元組序和網路位元組序

1位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big en...

位元組序與網路位元組序

cpu向記憶體儲存資料的方式有2種,這意味著cpu解析資料的方式也分為2種 0x20號 0x21號 0x22號 0x23號 0x12 0x32 0x56 0x78 整數0x12345678,0x12是最高位位元組,0x78是最低位位元組。因此大端中先儲存最高位位元組0x12,小端序儲存方式如下 0x...