如何计算两个IP之间的IP数量
发布网友
发布时间:2022-04-23 23:58
我来回答
共2个回答
热心网友
时间:2022-05-03 08:40
//你参考下 1.1.1.1 到 2.2.2.2的IP数量为16个
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int getIPCount(char[],char[]);
void cutIPAddr(char[],int[]);
bool isValidIP(char[]);
void main()
{
int flag;
flag=getIPCount("1.1.1.1","2.2.2.2");
if(flag!=-1)
{
printf("IP数量为:%d\n",flag);
}
}
//统计2个IP段之间有多少个IP
int getIPCount(char ip1[],char ip2[])
{
if(isValidIP(ip2)==false || isValidIP(ip2)==false)
{
return -1;
}
int arr1[4];
int arr2[4];
int res=1;
cutIPAddr(ip1,arr1);
cutIPAddr(ip2,arr2);
for(int i=0;i<4;i++)
{
res*=(abs(arr1[i]-arr2[i])+1);
}
return res;
}
//分割IP地址存放到数组
void cutIPAddr(char ip[],int arr[])
{
bool flag=true;
int times=0;
for(int i=0;i<(int)strlen(ip);i++)
{
if(ip[i]!='\0')
{
if(ip[i]!='.')
{
if(flag==true)
{
arr[times]=atoi(ip+i);
times++;
flag=false;
}
}
else
{
flag=true;
}
}
}
}
//IP地址不合法
bool isValidIP(char IP[])
{
int num;
int isDot=0;
bool flag=true;
for(int i=0;i<(int)strlen(IP);i++)
{
if(IP[i]!='\0')
{
if(IP[i]!='.')
{
if(flag==true)
{
num=atoi(IP+i);
flag=false;
}
if(num<0 || num>255)
{
printf("IP地址不合法(%d)\n",num);
return false;
}
}
else
{
isDot++;
flag=true;
}
}
}
//超出3个点为不合法
if(isDot>3)
{
return false;
}
return true;
}
热心网友
时间:2022-05-03 09:58
发到C/C++分类是想用编程计算么