如何结合2个字符串使用或运算符?

时间:2017-04-27 12:47:35

标签: java binary

String a="b5a99e49708ecf072f189b4f85007c76990ef305";
String b="a7d55b1a392a1f34ab95453817fdd49df140c486";

示例i将字符串转换为十进制“1”。这是6位。我怎么做7bits?并使用或运算符字符串a和b;

这是我的代码

char[] c = a.toCharArray();
char[] d = b.toCharArray();

for (int i = 0; i < str.length(); i++)
{
    r += Integer.toBinaryString(c[i]|d[i]);     
}

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你只需要在二进制字符串前加上正确数量的零,这样总共有7位。生成一个固定数量的小字符的标准技巧是在该字符的常量字符串上使用String.substring()。由于char适合16位,因此我们永远不会需要超过16个零:

    String binaryString = Integer.toBinaryString(ch);
    int missingZeroes = desiredNumberOfBits - binaryString.length();
    if (missingZeroes > 0) {
        binaryString = "0000000000000000".substring(0, missingZeroes) + binaryString;
    }
    System.out.println(binaryString);

如果chchar持有1,则以上打印

0110001

如果您需要,可以填写c[i] | d[i]而不是ch

您可能希望添加一个防御性检查,表明来自Integer.toBinaryString()的字符串不是太长。

答案 1 :(得分:-1)

您可以将这些十六进制值组合为字符串。

char[] c = a.toCharArray();
char[] d = b.toCharArray();
char[] r = new char[Math.min(a.length, b.length)];
String hex = "0123456789abcdef";

for (int i = 0; i < r.length; i++) {
    int ci = Character.getNumericValue(c[i]);
    int di = Character.getNumericValue(d[i]);
    int ri = ci | di;
    r[i] = hex.charAt(ri);
}
String s = new String(r);