题目描述:子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。
功能: 判断两台计算机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 a[4]={0}; int b[4]={0}; int c[4]={0}; int i=0; int flag=1; int tmp=0; while(*pcIp1) { while((*pcIp1!='.')&&(*pcIp1)) { tmp =tmp*10+(int)(*pcIp1-'0'); pcIp1++; } if(*pcIp1=='.') { pcIp1++; a[i++]=tmp; tmp=0; } } a[i]=tmp; tmp=0; i=0; while(*pcIp2) { while((*pcIp2!='.')&&(*pcIp2)) { tmp =tmp*10+(int)(*pcIp2-'0'); pcIp2++; } if(*pcIp2=='.') { pcIp2++; b[i++]=tmp; tmp=0; } } b[i]=tmp; tmp=0; i=0; while(*pcSubNetworkMask) { while((*pcSubNetworkMask!='.')&&(*pcSubNetworkMask)) { tmp =tmp*10+(int)(*pcSubNetworkMask-'0'); pcSubNetworkMask++; } if(*pcSubNetworkMask=='.') { pcSubNetworkMask++; c[i++]=tmp; tmp=0; } } c[i]=tmp; for(i=0;i<4;i++) { if((a[i]&c[i]) == (b[i]&c[i])) continue; else { flag=0; break; } } return flag; }
本看来看了一个大神的代码,发现看不太明白。于是我就想将char数组里面的IP地址的点分十进制转换到int数组里,然后直接利用AND运算,得出结果。
但是,对于:pcIp1[12]={‘1’,‘9’,‘2’,'.','1','6','8','.''0','.','1'}这样的字符数组有点hold不住,循环不知道怎么嵌套。花了4个半小时,才把这道初级题做出来,代码写的重复度挺挺高的,仅以此哀悼耗掉的时间和错过的一场宣讲会吧。。。。。。