子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。
利用sscanf_s函数进行格式化输入,很方便得到各个数字,下面进行与运算就OK了
#include<stdio.h>
#include "OJ.h"
/*
功能: 判断两台计算机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不属于同一子网络;
1:IP1与IP2属于同一子网络;
*/
int IsSameSubNetwork(char * pcIp1, char * pcIp2, char * pcSubNetworkMask)
{
/*在这里实现功能*/
int ip1[4] = {0};
int ip2[4] = {0};
int ip3[4] = {0};
sscanf_s(pcIp1, "%d.%d.%d.%d", &ip1[0], &ip1[1],&ip1[2],&ip1[3]);
sscanf_s(pcIp2, "%d.%d.%d.%d", &ip2[0], &ip2[1],&ip2[2],&ip2[3]);
sscanf_s(pcSubNetworkMask, "%d.%d.%d.%d", &ip3[0], &ip3[1],&ip3[2],&ip3[3]);
// or: sum = sum * 10 +str[i] -'0';
for (int i=0;i<4;i++)
{
if (ip1[i]<0 || ip1[i]>255 || ip2[i]<0 || ip2[i]>255 || ip3[i]<0 || ip3[i]>255)
return 0;
}
if ((ip1[0] & ip3[0]) == (ip2[0] & ip3[0]))
if((ip1[1] & ip3[1]) == (ip2[1] & ip3[1]))
if((ip1[2] & ip3[2]) == (ip2[2] & ip3[2]))
if((ip1[3] & ip3[3]) == (ip2[3] & ip3[3]))
return 1;
return 0;
}