IP地址转换函数inet_addr(),inet_aton(),inet_ntoa(),int_pton()

函数原型1 : in_addr_t inet_addr(const char *cp);
函数原型1 :in_addr_t inet_addr(const char *cp);
参数  cp:传入的ip地址
demo:                 

 
  1. int  ip_addr;

  2. ip_addr = inet_addr("192.168.2.125");   //设置ip点分十进制地址的地址

  3. if(ip_addr==INADDR_NONE)               //  返回值错误判断

  4.    printf("ERROR");

  5. printf("%d\n", ip_addr);              //打印转换后的网络字节序


函数原型2:int inet_aton(const char *cp, struct in_addr *inp);
参数  cp:传入的ip地址;inp   指向转换后存储到struct in_addr结构体的s_addr;

 
  1. int ip_addr;

  2. struct in_addr inet_ip_addr;

  3. ip_addr = inet_aton("192.168.2.125", &inet_ip_addr);

  4. printf("%d\n",inet_ip_addr.s_addr);

 函数原型3: char *inet_ntoa(struct in_addr in);

 
  1. struct in_addr network;

  2. network.s_addr=2097326272; //为s_addr赋值--网络字节序

  3. printf("IP : %s\n", inet_ntoa(network));

函数原型4:  int inet_pton(int af, const char *src, void *dst);

af:地址簇,可选项:AF_INET(IPv4);AF_INET6(IPv6);    src:传入的IP地址

dst:将ip地址转换成网络字节序后的结果存储在dst指向的 struct in_addr 结构体中 s_addr 成员

 
  1. int ret;

  2. struct in_addr var_ip;

  3. ret = inet_pton(AF_INET, "192.168.2.125", (void *)&var_ip);

  4. if(ret==0)

  5. printf("IP is not contained in address family\n");

  6. if(ret == -1)

  7. printf("errno: EAFNOSUPPORT\n");

  8. printf("%d\n",var_ip.s_addr);

  9. /*----------------

  10. struct in_addr {

  11. uint32_t s_addr; // ip地址的网络字节序

  12. };

  13. 上述结构体为struct sockaddr_in 中的参数3

  14. struct sockaddr_in {

  15. sa_family_t sin_family; // 地址簇

  16. in_port_t sin_port; // 端口的网络字节序

  17. struct in_addr sin_addr; // internet address

  18. };

  19. -----------------*/

函数原型5  --> const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);

af   同上;   src:传入的网络字节序;   dst:传出的IP地址;    size:IP地址长度

 
  1. char ip_buff[INET_ADDRSTRLEN]={0};

  2. struct in_addr net_ip;

  3. net_ip.s_addr = 2097326272;

  4. const char *ret;

  5. ret = inet_ntop(AF_INET, (const void *)&net_ip.s_addr, ip_buff, sizeof(ip_buff) );

  6. if(ret==NULL){ // 对返回值进行错误判断

  7. if(strcmp(ret,"EAFNOSUPPORT"))

  8. perror("AF error:");

  9. if(strcmp(ret,"ENOSPC"))

  10. printf("address string over setted size");

  11. } // 会报警告

  12. printf("%s\n", ip_buff);

所用到的头文件如下:

 
  1. #include <stdio.h>

  2. #include <string.h>

  3. #include <errno.h>

  4. #include <sys/socket.h>

  5. #include <netinet/in.h>

  6. #include <arpa/inet.h>

学习完写的小demo,不是很好,代码中写死IP和网络字节序是为了方便,写得不算好,毕竟才看完网络编程的视频,欢迎各位大佬指点,也欢迎各位像我一样的小白可以直接拿去用方便理解!

(478条消息) IP地址转换函数inet_addr(),inet_aton(),inet_ntoa(),int_pton()_Lurora0的博客-CSDN博客_inet_addr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值