Comparing two byte arrays in .NET
You can use Enumerable.SequenceEqual method.
using System;using System.Linq;...var a1 = new int[] { 1, 2, 3};var a2 = new int[] { 1, 2, 3};var a3 = new int[] { 1, 2, 4};var x = a1.SequenceEqual(a2); // truevar y = a1.SequenceEqual(a3); // false
If you can't use .NET 3.5 for some reason, your method is OK.
Compiler\run-time environment will optimize your loop so you don't need to worry about performance.
P/Invoke powers activate!
[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]static extern int memcmp(byte[] b1, byte[] b2, long count);static bool ByteArrayCompare(byte[] b1, byte[] b2){ // Validate buffers are the same length. // This also ensures that the count does not exceed the length of either buffer. return b1.Length == b2.Length && memcmp(b1, b2, b1.Length) == 0;}
There's a new built-in solution for this in .NET 4 - IStructuralEquatable
static bool ByteArrayCompare(byte[] a1, byte[] a2) { return StructuralComparisons.StructuralEqualityComparer.Equals(a1, a2);}