如何比较两个字节数组

时间:2012-09-09 20:30:37

标签: c# bytearray

我有两个完全相同内容的字节数组。我试过了:

if (bytearray1 == bytearray2) {...} else {...}

if (Array.Equals(bytearray1, bytearray2)) {....} else {...}

一直到别的地方!我不知道为什么!我手动多次检查了两个阵列!!!

4 个答案:

答案 0 :(得分:67)

尝试使用SequenceEqual扩展方法。例如:

byte[] a1 = new byte[] { 1, 2, 3 };
byte[] a2 = new byte[] { 1, 2, 3 };
bool areEqual = a1.SequenceEqual(a2); // true

答案 1 :(得分:12)

==运算符按引用进行比较;这是两个不同的例子。

Array.Equals实际上是Object.Equals,它调用实例Equals方法 由于数组不会覆盖Equals(),因此也可以通过引用进行比较。

相反,您应该调用LINQ SequenceEqual()方法。

答案 2 :(得分:8)

==运算符和Equals方法都将测试引用相等性。由于你有两个独立的数组,它们永远不会相等。

由于您要测试两个阵列的内容顺序是否相同,请尝试使用SequenceEqual方法。

答案 3 :(得分:-4)

作为替代方案,如果您不习惯使用LINQ,可以使用System.Convert类......

byte[] a1;
byte[] a2;

if (System.Convert.ToBase64String(a1) == System.Convert.ToBase64String(a2)) {
    doSomething();
}
else {
    doSomethingElse();
}