Java位比较

时间:2013-10-14 13:52:17

标签: java string comparison bits

我编写了一个程序,将两个字符串与位进行比较,例如

IP地址Oct1 => 11000000

子网掩码Oc1 => 01000000

但是第4个八位字节的比较不能正常工作。 http://pastie.org/private/xfccedpcrcksa5so6rykmg

该函数名为compareBits():

public static String compareBits(String oct, String oct2) {
    String comparison = "";
    for(int i=0; i<=oct.length()-1; i++) {
        if(oct.charAt(i) == oct2.charAt(i) && oct.charAt(i) != 0) {
            comparison = comparison+"1";
        } else {
            comparison = comparison+"0";
        }
    }

    return comparison;
}

在第4个八位字节,它显示反转的结果。 (00000001,但应该是10000000)

你能帮我找一下我到目前为止所写的附加代码的问题吗?

1 个答案:

答案 0 :(得分:3)

以下是我对比较方法的看法:

public static String compareBits(String oct, String oct2) {
    String comparison = "";
    for(int i=0; i<=oct.length()-1; i++) {
        if(oct.charAt(i) == oct2.charAt(i) && oct.charAt(i) != '0') {
            comparison = comparison+"1";
        } else {
            comparison = comparison+"0";
        }
    }

    return comparison;
}

由于您正在检查charAt(),因此您获得了一个字符,但是您与0进行比较,而不是与字面值“0”进行比较。这应该可以解决问题。

另一方面,我认为可以用更少的代码来完成这项任务,例如:

long ipL = IpConverter.ipToLong(ip);
long maskL = IpConverter.ipToLong(mask);
System.out.println(IpConverter.longToIp(ipL & maskL));

此致