inet_aton、inet_ntoa、inet_pton和inet_ntop都是用于IP地址与大端网络字节序二进制数字相互转换的函数
不同的是inet_aton和inet_ntoa只支持ipv4类型的地址转换,而inet_pton和inet_ntop支持ipv4和ipv6类型的地址转换
头文件和函数原型:
#include<sys/scoket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int inet_aton(const char * cp,struct in_addr *inp);
说明
inet_aton()用来将参数cp所指的ipv4点分十进制网络地址字符串转换成网络使用的大端字节序二进制数字,然后存于参数inp所指的in_addr结构中。成功则返回非0值,失败则返回0。
//结构in_addr定义如下
struct in_addr
{
unsigned long int s_addr;
};
头文件和函数原型:
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
char * inet_ntoa(struct in_addr in);
说明
inet_ntoa()用来将参数in所指的大端网络字节序二进制的数字转换成ipv4点分十进制字符串网络地址,然后将指向此网络地址字符串的指针返回。成功则返回字符串指针,失败则返回NULL。
头文件和函数原型:
#include <sys/socket.h>
#include <netinet/in.h>
#include<arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
说明:
inet_pton()用来将ipv4或者ipv6类型的字符串转换为大端网络字节序二进制数字,第一个参数af是地址簇,取值为AF_INET(表示ipv4使用的地址簇)和AF_INET6(表示ipv6使用的地址簇),第二个参数src是来源地址,第三个参数 dst接收转换后的数据。
头文件和函数原型:
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
说明:
inet_ntop()将大端网络字节序二进制数转换为ipv4或者ipv6类型的字符串,参数的作用和inet_pton相同,只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC。