知道本地IP地址A以及其子网掩码,想知道IP地址B是否与A同网段。想知道Java有没有某个类可以直接验证的?如果没有,就得自己写方法。我思路是先获得本地IP地址以及子网掩码的前缀长度,然后将两个IP地址和子网掩码都转换成二进制码,之后用A的二进制和子网掩码进行与运算,B的二进制码和子网掩码进行与运算,比对两者得出的网络号是否一致。IP地址转换成二进制码代码该如何写呢?例:String ip = "192.168.155.155" 求高手指导

解决方案 »

  1.   

    从String转化到长整型,方法很多,我这里用的是正则表达式。
    至于转化成二进制,这是你想多了。进制是浮云。计算机的进行运算的时候,都是以二进制进行运算的。只不过再存储及显示的时候,可以转换成其他的进制。
    比如说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));
        }
    }