飞音时代笔试:
将点分十进制的IP地址转换为十进制数:
1、检查格式,不符合IP格式的返回0;
例如:192.168.1或192.168.1.test,返回0
2、转换:将转换后的数返回;
例如:1.1.1.1转换后为
16,843,009
#include<stdio.h>
#include<stdlib.h>
int con_baiyi_IP2INT(const char *ipaddr)
{
char *str=ipaddr;
int i=0,num=0;
//判断ip是否合法
while(str[i])
{
if('.'==str[i])
{
num++;
}
if('.'==str[i]&&'.'==str[i+1])
{
return 0;
}
if((str[i]<'0'||str[i]>'9')&&str[i]!='.')
{
return 0;
}
i++;
}
if(num!=3)
{
return 0;
}
//转换
char *argv[4]={0};
argv[0]=str;
i=0;
int j=1;
while(str[i])
{
if(str[i]=='.')
{
str[i]='\0';
argv[j++]=&str[i+1];
}
i++;
}
int val;
//atoi:将字符串转换为整型数
val=atoi(argv[0])<<24|atoi(argv[1])<<16|atoi(argv[2])<<8|atoi(argv[3])<<0;
return val;
}