#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解析完成 退出函数
}
C语言 将字符串型的IP地址转换成数值并存入数组
最新推荐文章于 2024-06-26 18:11:17 发布