zoukankan      html  css  js  c++  java
  • IP处理函数inet_aton()和inet_ntoa(),inet_pton,inet_ntop

    inet_ntoa:

    功能:
    将一个IP转换成一个互联网标准点分格式的字符串。
    原型:
    char FAR * inet_ntoa( struct in_addr in);
    返回值:
    如果正确,返回一个字符指针,指向一块存储着点分格式IP地址的静态缓冲区(同一线程内共享此内存);错误,返回NULL。
     
    与此相反的函数:
    inet_aton()是一个将一个字符串IP地址转换为一个32位的网络序列IP地址。
    完整描述:
    int inet_aton(const char *string, struct in_addr*addr);
    参数描述:
    1 输入参数string包含ASCII表示的IP地址。
    2 输出参数addr是将要用新的IP地址更新的结构。
    返回值:
    如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。使用这个函数并没有错误码存放在errno中,所以它的值会被忽略。
    函数说明及举例
    对于这个函数有一点迷惑的就是这个函数调用所需要的两个参数。
    如果我们定义了一个AF_INET套接口地址:
    struct sockaddr_in adr_inet; /* AF_INET */
    提供给inet_aton函数调用的第二个参数指针为 &adr_inet.sin_addr
     测试代码如下
     
      include <stdio.h>
     
      #include <sys/socket.h>
     
      #include <netinet/in.h>
     
      #include <arpa/inet.h>
     
      #include <string.h>
     
      int main(int aargc, char* argv[])
     
      {
     
      struct in_addr addr1,addr2;
     
      ulong l1,l2;
     
      l1= inet_addr("192.168.0.74");
     
      l2 = inet_addr("211.100.21.179");
     
      memcpy(&addr1, &l1, 4);
     
      memcpy(&addr2, &l2, 4);
     
      printf("%s : %s/n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果
     
      printf("%s/n", inet_ntoa(addr1));
     
      printf("%s/n", inet_ntoa(addr2));
     
      return 0;
     
      }
     
      实际运行结果如下:
     
      192.168.0.74 : 192.168.0.74 //从这里可以看出,printf里的inet_ntoa只运行了一次。
     
      192.168.0.74
     
      211.100.21.179
     
      inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。第一句printf的结果只能说明在printf里面的可变参数的求值是从右到左的,仅此而已。
    上面的这个问题值得重视。
     
     
    inet_pton,inet_ntop这两个函数较新,对ipv4和ipv6地址都能处理。
    p代表presentation,n代表numeric。
    presentation格式通常是asciil串,nueric格式则是存在于套接口地址结构中的二进制值。
     
     
     
     
  • 相关阅读:
    强连通分量入度和出度
    Tarjan 强连通分量
    强连通是真的强~
    Yii2.0 RESTful API 基础配置教程
    微信小程序循环数组展示数据点击当前改变当前按钮状态
    初入博客园
    博客总目录
    当我们在谈论kmeans(4)
    当我们在谈论kmeans(5)
    当我们在谈论kmeans(3)
  • 原文地址:https://www.cnblogs.com/youxin/p/3801205.html
Copyright © 2011-2022 走看看