第六章:表達格式和數值格式的轉換

穆晨發表於2017-01-29

前言

       在網路程式設計中,使用者給出的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。

相關文章