C语言快速实现整数IP和字符串IP之间的转换

版权声明:本文为博主原创文章,转载时请标明来源。 https://blog.csdn.net/aiwangtingyun/article/details/82771601

IP一般由32位整数组成,按每8位划分为4部分:255.255.255.255 该显示方式为字符串形式,而IP一般是以整数形式显示。下面通过位移和求余取整操作快速实现整数IP转换为字符串IP:


整数IP地址 unsigned int IP_Addr = 1713350848 转化为二进制为:01100110-00011111-10101000-11000000 根据8位划分得到结果为102-31-168-192,由于网络字节倒序的问题,实际IP为192.168.31.102


下面为整数IP和字符串IP之间转换的代码

    /* 待转化的整数IP */
    unsigned  int IP_Addr = 1713350848;
	
    /* 提取IP:位移操作 */
    int addr_1 = IP_Addr >> 24;        // 提取第一部分IP地址
    IP_Addr = IP_Addr << 8;
    int addr_2 = IP_Addr >> 24;        // 提取第二部分IP地址 
    IP_Addr  = IP_Addr << 8;
    int addr_3 = IP_Addr >> 24;        // 提取第三部分IP地址 
    IP_Addr  = IP_Addr  << 8;
    int addr_4 = IP_Addr  >> 24;       // 提取第四部分IP地址 

    /* 提取IP:求余取整 */
    int addr_1  = IP_Addr % 256;       // 提取第一部分IP地址
    IP_Addr  = IP_Addr / 256;		
    int addr_2 = IP_Addr % 256;        // 提取第一部分IP地址
    IP_Addr  = IP_Addr / 256;		
    int addr_3 = IP_Addr % 256;        // 提取第一部分IP地址
    IP_Addr = IP_Addr / 256;		
    int addr_4  = IP_Addr % 256;       // 提取第一部分IP地址
	
    /* 打印IP地址:结果为"192.168.31.102" */
    printf("IP地址为:%d.%d.%d.%d", addr_4, addr_3, addr_2, addr_1);

    /********************** 字符串IP转整数就比较简单了 ***************************/

    /* 待转换字符串IP */
    char * IP_Addr = "192.168.31.102";

    /* 提取4部分整数:提取方法很多这里省略 */
    int addr_1 = 192;
    int addr_2 = 168;
    int addr_3 = 31;
    int addr_4 = 102;

    /* 根据网络字节倒序计算IP整数 */
    unsigned int IP_Int = addr_1 + (addr_2 * 256) + (addr_3 * 256 * 256) + (addr_4 * 256 * 256 *256);

猜你喜欢

转载自blog.csdn.net/aiwangtingyun/article/details/82771601