子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
vector<int> funa(string str){
string tmp = "";
vector<int> ip;
int len = str.length(), x = 0;
stringstream ss;
for (int i = 0; i < len; ++i){
if (str[i] != '.'){ tmp.push_back(str[i]); }
else{
ss << tmp;
ss >> x;
ip.push_back(x);
tmp.clear();
ss.clear();
}
}
ss << tmp;
ss >> x;
ip.push_back(x);
tmp.clear();
ss.clear();
return ip;
}
void HWoj(){
string str = "192.168.0.1";
string str2 = "192.168.256.114";
string m = "255.255.255.0";
vector<int>ip1, ip2,mask;
mask = funa(m);
ip1 = funa(str);
ip2 = funa(str2);
int a = 0, b = 0;
char R = '0';
for (int i = 0; i < 4; ++i){
if (ip1.at(i) > 255 || ip2.at(i) > 255 || mask.at(i)>255){ R = '1'; break; }
a = ip1.at(i)&mask.at(i);
b = ip2.at(i)&mask.at(i);
if (a!=b){ R='2';break; }
}
cout << R;
cout << endl;
}