判断两台计算机IP地址是同一子网络

子网掩码是用来判断任意两台计算机的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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值