它们在ASCII字符串网络字节序的二进制值(此值存于套接口地址结构中)间转换地址。

inet_aton、inet_addr和inet_ntoa在点分十进制数串(“206.168.112.96”)与它的32位网络字节序二进制值间转换IPv4地址。

#include<arpa/inet.h>

int inet_aton(const char *strptr, struct in_addr *addrptr);  返回:1--串有效, 0--串有错

in_addr_t inet_addr(const char *strptr);

    返回:若成功,返回32位二进制的网络字节序地址;若有错,返回INADDR_NONE

char *inet ntoa(struct in_addr inaddr);

              返回:指向点分十进制数串的指针

第一个函数inet_aton将strptr所指的C字符串转换成32位的网络字节序二进制值,并通过指针addrptr来存储。如果成功返回1,否则返回0.

inte_addr进行相同的转换,返回值为32位的网络字节序二进制值。这个函数存在这样的问题:所有2的32次方个可能的二进制值都是有效的IP地址(从0.0.0.0到255.255.255.255),但当出错时返回一个常值INADDR_NONE(一般为一个32位均为1的值)。这就意味着点分十进制数串255.255.255.255(这是IPv4的有线广播地址)不能由此函数处理,因为它的二进制值被用来指示函数失败。

 

现在人们都反对使用函数inet_addr,而用函数inet_aton来代替。更好的办法是用下一节介绍的新函数,它们对IPv4和IPv6都能处理。

函数inet_ntoa将一个32位的网络字节序二进制IPv4地址转换成相应的点分十进制数串。由函数返回值所指的串驻留在静态内存中,这意味着函数是不可重入的。注意这个函数以结构为参数,而不是指向结构的指针。

posted on 2012-01-02 10:58  ChangeIt  阅读(1020)  评论(0)    收藏  举报