首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对4字节数组进行异或运算

如何对4字节数组进行异或运算
EN

Stack Overflow用户
提问于 2018-07-28 22:42:12
回答 3查看 378关注 0票数 1

我在尝试XOR 4个不同的字节数组时遇到了一个问题。根据我对XOR的理解,A XOR B= C;B XOR C=A。

代码语言:javascript
复制
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运算缺乏理解。

EN

回答 3

Stack Overflow用户

发布于 2018-07-28 22:49:31

这与XOR无关,但在计算它时会覆盖数组。调用该方法后的内容与之前不同。此外,您的结果数组是输入数组之一。这会导致各种混叠问题。

票数 3
EN

Stack Overflow用户

发布于 2018-07-28 23:06:17

我会怎么做:

代码语言:javascript
复制
byte[] xor(byte[] a, byte[] b) {
  if (a.length != b.length) throw new IllegalArgumentException();
  byte[] c = new byte[a.length];
  for (int i = 0; i < a.length; i++) {
    c[i] = a[i] ^ b[i];
  }
  return c;
}

然后您可以对其进行测试:

代码语言:javascript
复制
byte[] b1 = ..., b2 = ... b3 = ..., b4 = ...;
byte[] b5 = xor(b1, xor(b2, xor(b3, b4)));
票数 2
EN

Stack Overflow用户

发布于 2018-07-29 01:40:04

对任意数量的数组进行XOR运算,如下所示。

代码语言:javascript
复制
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;
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51572405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档