关于atoi的应用,atoi把char字符串转换成int数值,这里有一个atoi的典型应用,即判断ip地址的合法性,需要把某个区域的char*转换成int判断范围,因此需要使用atoi函数,它的定义如下:int atoi ( const char * str );
unsigned short parse_ip(char* ip)
{
// judge by length of ip address
unsigned short len = strlen(ip);
if (len < 7 || len > 15)
return 0;
char tmp[16] = {0};
unsigned char i = 0;
unsigned char j = 0;
unsigned char dot_counter = 0;
while(ip[j] != 0)
{
if (ip[j] >= '0' && ip[j] <= '9')
{
// digit
tmp[i] = ip[j];
if (strlen(tmp) > 3)
return 0; // 出现某个区域数字大于4位
i++;
j++;
continue;
}
else if (ip[j] == '.')
{
// dot
if (i == 0)
return 0;
dot_counter++;
unsigned short ai = atoi(tmp);
if ( ai > 255 || ai < 0 )
return 0; // 某个区域数字不符合约束
i = 0;
memset(tmp, 0, sizeof(tmp));
j++;
continue;
}
else
return 0; // 出现非法符号
}
if ( dot_counter != 3 )
return 0;
if (atoi(tmp) > 255 || atoi(tmp) < 0)
return 0;
return len;
}
unsigned short parse_ip(char* ip)
{
// judge by length of ip address
unsigned short len = strlen(ip);
if (len < 7 || len > 15)
return 0;
char tmp[16] = {0};
unsigned char i = 0;
unsigned char j = 0;
unsigned char dot_counter = 0;
while(ip[j] != 0)
{
if (ip[j] >= '0' && ip[j] <= '9')
{
// digit
tmp[i] = ip[j];
if (strlen(tmp) > 3)
return 0; // 出现某个区域数字大于4位
i++;
j++;
continue;
}
else if (ip[j] == '.')
{
// dot
if (i == 0)
return 0;
dot_counter++;
unsigned short ai = atoi(tmp);
if ( ai > 255 || ai < 0 )
return 0; // 某个区域数字不符合约束
i = 0;
memset(tmp, 0, sizeof(tmp));
j++;
continue;
}
else
return 0; // 出现非法符号
}
if ( dot_counter != 3 )
return 0;
if (atoi(tmp) > 255 || atoi(tmp) < 0)
return 0;
return len;
}