【发布时间】:2016-09-06 11:16:50
【问题描述】:
我有一个二进制字符串,我想对该字符串的几个位执行异或运算。 我的字符串是:
011001100011100000000011
我正在尝试使用下一行代码执行计算:
private String ParityCalc(String str){
char[] cA = str.toCharArray();
int[] D = new int[6];
D[0] = D29^cA[0]^cA[1]^cA[2]^cA[4]^cA[5]^cA[9]^cA[10]^cA[11]^cA[12]^cA[13]^cA[16]^cA[17]^cA[19]^cA[22];
D[1] = D30^cA[1]^cA[2]^cA[3]^cA[5]^cA[6]^cA[10]^cA[11]^cA[12]^cA[13]^cA[14]^cA[17]^cA[18]^cA[20]^cA[23];
D[2] = D29^cA[0]^cA[2]^cA[3]^cA[4]^cA[6]^cA[7]^cA[11]^cA[12]^cA[13]^cA[14]^cA[15]^cA[18]^cA[19]^cA[21];
D[3] = D30^cA[1]^cA[3]^cA[4]^cA[5]^cA[7]^cA[8]^cA[12]^cA[13]^cA[14]^cA[15]^cA[16]^cA[19]^cA[20]^cA[22];
D[4] = D30^cA[0]^cA[2]^cA[4]^cA[5]^cA[6]^cA[8]^cA[9]^cA[13]^cA[14]^cA[15]^cA[16]^cA[17]^cA[20]^cA[21]^cA[23];
D[5] = D29^cA[2]^cA[4]^cA[5]^cA[7]^cA[8]^cA[9]^cA[10]^cA[12]^cA[14]^cA[18]^cA[21]^cA[22]^cA[23];
for (int i = 0; i < 6; i++){
if (D[i] == 48){
D[i] = 0;
} else if (D[i] == 49){
D[i] = 1;
}
}
StringBuilder parity = new StringBuilder();
parity.append(D[0]).append(D[1]).append(D[2]).append(D[3]).append(D[4]).append(D[5]);
D29 = D[4];
D30 = D[5];
return parity.toString();
}
我得到的最终奇偶校验结果是:100000。 正确的结果应该是:001001。
D29 和 D30 是之前计算的奇偶校验位,都是整数。
我做错了什么,我该如何解决?我可能应该将其作为按位运算进行,但我似乎无法弄清楚。 任何帮助将不胜感激。
【问题讨论】:
-
为什么不把字符串转成整数再做一次呢?
-
因为操作在几个位上是连续的。你会怎么做呢?
-
首先,可以将原始二进制字符串转换为整数,也可以将要提取的特定位构造为另一个整数。这取决于。
-
为了说清楚,假设原来的二进制字符串是A,A的几位构造B,现在可以通过移位
0x1正确地做因子,做异或操作。 -
可以说我将使用
Interger.parseInt(str)将字符串转换为整数,那么我将如何在不同的位上执行异或?你能举个例子吗?
标签: java bit-manipulation xor parity bitwise-xor