zoukankan      html  css  js  c++  java
  • inet_addr函数实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    // 方法1:使用指针数组实现
    unsigned long inet_addr(const char *str)
    {
    	unsigned long lHost = 0;
    	int i = 1, j = 1;
    	const char *pstr[4] = { NULL };
    	pstr[0] = strchr(str, '.');
    	pstr[1] = strchr(pstr[0] + 1, '.');
    	pstr[2] = strchr(pstr[1] + 1, '.');
    	pstr[3] = strchr(str, '');
    
    	for (j = 0; j < 4; j++)
    	{
    		i = 1;
    		if (j == 0)
    		{
    			while (str != pstr[0])
    			{
    				lHost += (*--pstr[j] - '0') * i;
    				i *= 10;
    			}
    		}
    		else
    		{
    			while (*--pstr[j] != '.')
    			{
    				lHost += (*pstr[j] - '0') * i << 8 * j;
    				i *= 10;
    			}
    		}
    	}
    	return lHost;
    }
    
    // 方法2:使用strchr() + atoi()实现
    unsigned long inet_addr2(const char *str)
    {
    	unsigned long lHost = 0;
    	char *pLong = (char *)&lHost;
    	char *p = (char *)str;
    	while (p)
    	{
    		*pLong++ = atoi(p);
    		p = strchr(p, '.');
    		if (p)
    			++p;
    	}
    	return lHost;
    }
    
    // 方法3:使用strtok()函数,对字符串进行切割
    unsigned long inet_addr3(const char *str)
    {
    	unsigned long lHost = 0;
    	char *pLong = (char *)&lHost;
    	char substr[20] = { 0 };
    	strncpy(substr, str, sizeof(substr));
    	char *p = strtok(substr, ".");
    	while (p != NULL)
    	{
    		*pLong++ = atoi(p);
    		p = strtok(NULL, "."); // 获取下一个片段
    	}
    
    	return lHost;
    }
    
    // 方法4:使用联合体实现
    union CUnion
    {
    	unsigned long lHost;
    	unsigned short sHost[2];
    	unsigned char cHost[4];
    };
    
    unsigned inet_addr4(const char *str)
    {
    	CUnion u;
    	int i = 0;
    	char *p = (char *)str;
    
    	while (p)
    	{
    		u.cHost[i++] = atoi(p);
    		p = strchr(p, '.');
    		if (p)
    			++p;
    	}
    	return u.lHost;
    }
    
    int main()
    {
    	char str[20] = { '' };
    	while (true)
    	{
    		printf("请输入需要转换的IP地址:");
    		scanf_s("%s", str, sizeof(str));
    		unsigned long addr = inet_addr4(str);
    		printf("%s 转换后:0x%x
    ", str, addr);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动
    dubbox注解的一个坑
    内嵌Tomcat的Connector对象的静态代码块
    Spring Boot启动过程(三)
    Spring Boot启动过程(二)
    Spring Boot启动过程(一)
    SpringMVC基础学习(二)—开发Handler
    JS弹出框
    Oracle的基本学习(三)—函数
    Oracle的基本学习(二)—基本查询
  • 原文地址:https://www.cnblogs.com/veis/p/12587248.html
Copyright © 2011-2022 走看看