功能: 判断两台计算机IP地址是同一子网络。
原型:
int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);
输入参数:
char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;
返回值:
0:IP1与IP2不属于同一子网络;
原型:
int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask);
输入参数:
char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;
返回值:
0:IP1与IP2不属于同一子网络;
1:IP1与IP2属于同一子网络;
这个问题的难点在于怎样将ip地址转换为整数,有两种方法:
1、不使用strlen函数判断每组的长度,通过while循环判断是否到达行末
void strToInts(char *ipAdd, int* iArr )//将ip地址转换成整型,存储到iArr中
{
char temp[4];
memset(temp,0,sizeof(temp));
char *p = ipAdd;
int i =0;
int j= 0;
while (*p != '\0')//将前三个用'.'分割的字符串转换成整数
{
if (*p != '.')
{
temp [j] = *p;
j++;
++p;
}
else
{
iArr[i] = atoi(temp);
memset(temp,0,sizeof(temp));
j = 0;
i++;
++p;
}
}
iArr[i] = atoi(temp);//将最后一段字符串转换成整数
}
2、使用strlen的方法
<pre name="code" class="cpp">void getIp(char * phpIp,size_t * needIp)
{
size_t i = 0;
size_t len = strlen(phpIp);
char * pTemp;
size_t cntTem = 0;
size_t cntIp = 0;
size_t cnt = 0;
for(;i < len;++i)
{
if((phpIp[i] == '.') || (phpIp[i] == '\0'))
{
pTemp = (char *)malloc(sizeof(char) * cntTem);
memcpy(pTemp,phpIp + cntIp, cntTem);//首地址“phpIp + cntIp”也可以用“phpIp + i - cntTem”
needIp[cnt] = atoi(pTemp);
free(pTemp);
cntIp += (cntTem + 1);
cntTem = 0;
++cnt;
}
else
{
++cntTem;
}
}
}