c语言解析IP字符串

本文详细解析了一段用于解析IP地址的C/C++代码,介绍了如何验证和转换IP地址字符串到二进制格式,包括格式检查、数值范围验证等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码

int Utils::parseIp(char *data,unsigned char *dataIp)
{
	unsigned char  i = 0;
	unsigned char  j = 0;
	unsigned char  k = 0;
	unsigned char  point_num = 0;
	unsigned short value = 0;
	unsigned char ip[4];
	memset(ip,0,4);
	unsigned char ipLen = 0;

	if(data == NULL)
		return -1;

	//192.168.255.255
	if(strlen(data)>15)
		return -1;

	//0.0.0.0
	if(strlen(data)<7)
		return -1;

	ipLen = strlen(data);
	for(i=0;i<ipLen;i++)
	{
		if(data[i] == '.')
			point_num++;

		if((data[i] == '.')&&(data[i+1] == '.'))
		{
			point_num = 0;
			break;
		}
	}

	if(point_num == 3)//格式完全正确的情况下
	{
		for( k =0;k<4;)
		{
			for(i=0;(data[i]!='\0')&&(i<15);)
			{
				for(j=0,value =0;j<4;j++)
				{
					if((data[i] == '.')||(data[i]=='\0'))
					{
						i++;
						break;
					}
					value = (data[i]- '0')+value*10;
					i++;
				}

				if(value >255)
					return -1;
				else
					ip[k++] = value;

			}
		}

		memcpy(dataIp,ip,4);

		return 0;//正确

	}else
	{
		//错误 192...123是错误、或者192..123.,没有处理
		return -2;
	}
}

使用

	char ipStr[]="192.168.1.1";
	unsigned char ip[4];
	if(parseIp(ipStr,ip) != 0)
	{
		printf("format error \n");
	}
	else
	{
		printf("parse ip:%d.%d.%d.%d\n",ip[0],ip[1],ip[2],ip[3]);
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值