【发布时间】:2019-01-05 10:21:13
【问题描述】:
我在尝试异或 4 个不同的字节数组时遇到问题。根据我对 XOR 的了解,A XOR B = C; B XOR C = A。
public static byte[] test(byte[] b1, byte[] b2, byte[] b3, byte[] b4) {
if (b1.length > b2.length) {
byte[] tmp = b2;
b2 = b1;
b1 = tmp;
}
for (int i = 0; i < b1.length; i++) {
b2[i] ^= b1[i];
}
if (b2.length > b3.length) {
byte[] tmp = b3;
b3 = b2;
b2 = tmp;
}
for (int i = 0; i < b2.length; i++) {
b3[i] ^= b2[i];
}
if (b3.length > b4.length) {
byte[] tmp = b4;
b4 = b3;
b3 = tmp;
}
for (int i = 0; i < b3.length; i++) {
b4[i] ^= b3[i];
}
return b4;
}
我有 4 个字节数组:b1、b2、b3、b4。我用上面的方法给了我一个字节数组,我们称之为b5。
现在假设要获取 b1,我们将在上述方法中使用 b2、b3、b4、b5 作为参数。但是,这不会让我返回 b1。
所以我想知道是代码有问题还是因为我对异或运算缺乏了解。
【问题讨论】:
-
显示您的示例输入。在你异或之后,你正在交换一大堆东西。您应该在开始之前直接获得订单。