前言
在網路程式設計中,使用者給出的IP引數往往是字串格式的( 我們也稱它為表達格式 )。然而,請看通用套接字地址結構定義:
1 struct in_addr { 2 in_addr_t s_addr; // 存放IP地址的整型變數 3 }; 4 5 struct sockaddr_in { 6 uint8_t sin_len; 7 sa_family_t sin_familt; 8 in_port_t sin_port; 9 10 struct in_addr sin_addr; // 存放IP地址的結構 11 12 char sin_zero[8]; 13 };
觀察出,IP地址在套接字地址結構中是以結構體in_addr方式存放的,這種結構體也叫做IP引數的數值格式。當我們要將IP引數存進套接字地址結構,顯然要先將其轉換為數值格式。下面將介紹幾個函式,能很好的實現轉換功能。這些函式都包含在標頭檔案 arpa/inet.h 中。
表達格式 ------> 數值格式
函式原型:int inet_pton ( int family, const char *strptr, void *addrptr )
函式功能:將strptr中表達格式的IP地址對應的數值格式存進指標addrptr指向的區域。若成功則返回1, 輸入格式非法返回0,出錯返回-1。
數值格式 ------> 表達格式
函式原型:const char *inet_ntop ( int family, const void * addrptr, char * strptr, size_t len )
函式功能:將addrptr指向區域的數值格式的IP地址對應的表達格式存進strptr。若成功則返回指向結果的指標,否則返回NULL。