inet_pton , inet_ntop

inet_pton, inet_ntop是一个IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换。

inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。

 

函数定义:

#include<arpa/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);
                                 返回:若成功则为1,若输入不是有效的表达格式则为0,若出错则为-1
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
                                 返回:若成功则为指向结果的指针, 若出错则为NULL

参数:

这两个函数的family参数既可以是AF_INET,也可以是AF_INET6。

src为指向字符型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函数将该地址转换为in_addr结构体,并复制在*dst中。

len参数是目标存储单元的大小,以免该函数溢出其调用者的缓冲区。

#define INET_ADDRSTRLEN   16
#define INET6_ADDRSTRLEN  46

 

函数使用:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main (void)
{
	struct in_addr s; 
	char IPdotdec[20] = {0};
	
    //"1.2.3.4"  ----> 0x4030201
	inet_pton(AF_INET, "1.2.3.4", (void *)&s);

	printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序
	
    //0x4030201  ---> "1.2.3.4"
	inet_ntop(AF_INET, (void *)&s, IPdotdec, INET_ADDRSTRLEN);//INET_ADDRSTRLEN 16, INET6_ADDRSTRLEN 46

	printf("inet_ntop: %s\n", IPdotdec);
}

#if 0

最终:

toney@sw2:~/study/network$ gcc inet_pton.c 
toney@sw2:~/study/network$ ./a.out 
inet_pton: 0x4030201
inet_ntop: 1.2.3.4


#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值