zoukankan      html  css  js  c++  java
  • 3. IP地址转换函数

    一、字符串表示的IP地址需要被转化为整数(二进制数)方能使用

    IPv4地址:点分十进制字符串

    IPv6地址:十六进制字符串

    有时(如记录日志),我们则要把整数(二进制数)表示的IP地址转化为可读的字符串

    二、三个只能用于IPv4地址的函数

    /* 点分十进制数串 <----> 长度为32位的网络字节序二进制值 */
    in_addr_t	inet_addr(const char *strptr);
    int			inet_aton(const char *cp, struct in_addr *inp)
    char*		inet_ntoa(struct in_addr in);
    

    1. inet_ntoa是不可重入的,其内部用一个静态变量存储转化的结果,返回值指向该静态内存

    char *pAddr1 = inet_ntoa("1.2.3.4");
    char *pAddr2 = inet_ntoa("10.194.71.60");
    printf("address 1: %s
    ", pAddr1);
    printf("address 2: %s
    ", pAddr2);
    
    /*  上面代码的输出结果  */
    // address 1: 10.194.71.60
    // address 2: 10.194.71.60 
    

    2. inet_addr存在缺陷,现已被废弃,可用inet_aton来代替它

    三、同时适用于IPv4和IPv6地址的函数

    int			inet_pton(int family, const char *src, void *dst);
    const char* inet_ntop(int family, const void *src, char *dst, socklen_t len);
    

    参数len用于指定目标存储单元的大小,以免该函数溢出其调用者的缓冲区,有两个宏能帮助我们指定这个大小

    #define INET_ADDRSTRLEN		16			// 用于IPv4 
    #define	INET6_ADDRSTRLEN	46			// 用于IPv6 
    

      

    四、余音绕梁

    1. 推荐使用inet_pton和inet_ntop函数  

      

      

  • 相关阅读:
    170325 第六章应用层 域名系统 DNS
    文件操作(Linux系统调用)
    进程优先级,进程nice值和%nice的解释
    常用的操作系统进程调度算法
    fork函数返回值问题
    进度条的实现
    find命令
    单链表的插入排序
    B树
    排序
  • 原文地址:https://www.cnblogs.com/xzxl/p/9561231.html
Copyright © 2011-2022 走看看