有关XOR 4 byte数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

在尝试XOR 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。

提问于
用户回答回答于

XOR任何数组的字节数,如下所示。

public static byte[] xor(byte[]... arrays) {
    int len = 0;
    for (byte[] array : arrays)
        len = Math.max(len, array.length);
    byte[] result = new byte[len];
    for (int i = 0; i < len; i++) {
        byte b = 0;
        for (byte[] array : arrays) 
            b ^= i < array.length ? array[i] : 0; 
        result[i] = b;
    }
    return result;
}

为了避免混淆,我创建了一个新数组并返回该数组,而不是返回最长的字节[]。

用户回答回答于

这与XOR无关。是因为计算时要覆盖数组。调用方法后的内容与以前不一样。此外,结果数组是输入数组之一。这会引起各种混叠问题。

扫码关注云+社区

领取腾讯云代金券