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...