知道本地IP地址A以及其子网掩码,想知道IP地址B是否与A同网段。想知道Java有没有某个类可以直接验证的?如果没有,就得自己写方法。我思路是先获得本地IP地址以及子网掩码的前缀长度,然后将两个IP地址和子网掩码都转换成二进制码,之后用A的二进制和子网掩码进行与运算,B的二进制码和子网掩码进行与运算,比对两者得出的网络号是否一致。IP地址转换成二进制码代码该如何写呢?例:String ip = "192.168.155.155" 求高手指导
调试欢乐多
至于转化成二进制,这是你想多了。进制是浮云。计算机的进行运算的时候,都是以二进制进行运算的。只不过再存储及显示的时候,可以转换成其他的进制。
比如说int i;你说i是什么进制的呢?当然是二进制的,只不过println是以默认的十进制显示。
所以,你想进行按位与运算,根本不需要进制转换。
下面是程序:import java.util.regex.*;
public class Text {
public static void main(String[] args) throws Exception {
String ip[]={
"192.168.1.1",
"192.168.1.2",
"192.168.2.1"
};
String mask="255.255.255.0";
long addr[]={0,0,0};
long maskNum=0;
Pattern p=Pattern.compile("\\d+");
for(int i=0;i<ip.length;i++){
Matcher m=p.matcher(ip[i]);
for(int j=0;j<4;j++){
m.find();
addr[i]<<=8;
addr[i]+=Integer.parseInt(m.group());
}
}
Matcher m=p.matcher(mask);
for(int j=0;j<4;j++){
m.find();
maskNum<<=8;
maskNum+=Integer.parseInt(m.group());
}
System.out.println((addr[0]&maskNum)==(addr[1]&maskNum));
System.out.println((addr[0]&maskNum)==(addr[2]&maskNum));
}
}