C语言 将字符串型的IP地址转换成数值并存入数组

#define READY	0
#define DONE 	1
#define ERR		2

uint8_t BKF_ResolveIP(char *ip_char,uint8_t *ip)
{
	uint8_t ret;
	uint16_t len;
	uint16_t i,j,p=0;
	uint16_t temp;
	uint8_t temp_ip[4];
	uint8_t temp_ip_p;

	ret = READY;
	
	len = strlen(ip_char);
	if(len == 0 || len > 15)return ERR;

	p = 0;
	temp_ip_p = 0;
	for(i=0;i<len;i++)
	{
		if((ip_char[i] < '0' || ip_char[i] > '9') && ip_char[i] != '.')			// 如果不为数字或者"."
		{
			return ERR;
		}
		
		if(temp_ip_p < 3)
		{
			if(ip_char[i] == '.')
			{
				if((i-p) > 3 || i == p)											// 数字大于3位 且 第一个字符不能为"." 
				{
					return ERR;
				}
				
				for(j=p,temp=0;j<i;j++)											// 计算"."前面的数值大小
				{
					temp *= 10;
					temp += (ip_char[j]-'0');
				}
				if(temp>255)													// 数值不能大于255
				{
					return ERR;				
				}
				temp_ip[temp_ip_p] = temp;										// 记录IP地址
				temp = 0;
				temp_ip_p++;
			
				p = i+1;														// 记录'.'的位置
				
				if(temp_ip_p == 3)												// 已记录3位IP
				{
					if((len-p) > 3 || len == p)									// 剩余字符串的长度大于3或者字符串结束
					{
						return ERR;
					}
				}					
			}
		}
		else
		{
			temp *= 10;
			temp += (ip_char[i]-'0');
			if((i+1) == len)
			{
				if(temp<=255)													// 数值不能大于255				
				{
					temp_ip[temp_ip_p] = temp;									// 记录最后一位IP地址	
					memcpy(ip,temp_ip,4);
					ret = DONE;													// IP解析成功
				}	
				else
					return ERR;
			}				
		}
	}
	
	return ret;																// IP解析完成 退出函数
	
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专业业余临时工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值