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;
    }
    

      

  • 相关阅读:
    生成html报告并整合自动发动邮件功能
    python--selenium多线程执行用例实例/执行多个用例
    python--selenium实用的自动生成测试HTML报告方法--HTMLTestRunner
    mysql完整版
    hibernate分页
    解决hibernate向mysql插入中文乱码问题
    c++语言的 代码组织
    命令总结
    c++ 命名空间
    dpkg 、apt
  • 原文地址:https://www.cnblogs.com/veis/p/12587248.html
Copyright © 2011-2022 走看看