将 ipv4地址 转化为32位无符号整数 ——如 “10.10.1.1” 为168427777

将 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值