将 ipv4地址 转化为32位无符号整数
如 “10.10.1.1” 为168427777
思路:
1、依次取出四个部分ip,将其化为整数;若不足四部分,判定为非法ip
2、对每个部分的ip整数,看作是256进制,将其运算叠加,得到答案
其中每个部分最多三个数字,故使用循环三次获得整数,不足三个数字,检测跳出循环即可。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
int main() {
char ipAddr[] = "10.10.25";
char* str=ipAddr;
unsigned int num[4]={0};
char temp[3];
int a=0,b=0;//a是num的索引,b是计算每个ip部位的值
int i;
for(i=0;i<4;i++)
{
//四个部分需要转化
int j;
for(j=0;j<3;j++)
{
//每个部分最多三个数字
if( (*str=='.') || (*str=='\0'))
{
break;
}
if(*str>'9' || *str<'0')
{
// printf("%c\n",*str);
printf("非法ip\n");
return 0;
}
temp[j]=*str;
b = b*10 + temp[j] - '0';
str++;
}
num[a]=b;
b=0;
if(*str=='\0')
{
if(i<3)
{
printf("非法ip\n");
return 0;//不合法,没走完四个部分
}
else
break;
}
else
{
//前面是从.出来的,所以这里要递增
str++;
a++;
}
}
int ans=0;
ans = num[0] *pow(256,3) + num[1] *pow(256,2) + num[2] *pow(256,1) + num[3] *pow(256,0) ;
// printf("jkljljjljjklj\n");
printf("%d\n",ans);
return 0;
}