C#的字节数组比较数组、字节

2023-09-02 01:48:06 作者:坐在坟头调戏鬼丿

我在使用.NET 3.0的C#两个字节数组。

I have two byte arrays in C# using .NET 3.0.

什么是最有效的方式来比较两个字节数组是否包含每个元素的相同的内容?

What is the "most efficient" way to compare whether the two byte arrays contains the same content for each element?

例如,字节数组 {为0x1,0X2} 是一样的 {为0x1,0X2} 。但是字节数组 {为0x1,0X2} 和字节数组 {0X2,为0x1} 是不一样的。

For example, byte array {0x1, 0x2} is the same as {0x1, 0x2}. But byte array {0x1, 0x2} and byte array {0x2, 0x1} are not the same.

推荐答案

好了,你可以使用:

public static bool ByteArraysEqual(byte[] b1, byte[] b2)
{
    if (b1 == b2) return true;
    if (b1 == null || b2 == null) return false;
    if (b1.Length != b2.Length) return false;
    for (int i=0; i < b1.Length; i++)
    {
        if (b1[i] != b2[i]) return false;
    }
    return true;
}

(我通常使用大括号的一切,但我想我会尝试这样的布局风格只是为了改变...)

(I normally use braces for everything, but I thought I'd experiment with this layout style just for a change...)

这有几个的优化而 SequenceEqual 不能(或没有)执行 - 如前期长度检查。直接数组访问也将更有效率一点比使用枚举。

This has a few optimisations which SequenceEqual can't (or doesn't) perform - such as the up-front length check. Direct array access will also be a bit more efficient than using the enumerator.

诚然这是不太可能在大多数情况下,显著的差异...

Admittedly it's unlikely to make a significant difference in most cases...

您可以的可能的使其更快的非托管code。通过使其在一个时间比较32或64位,而不是8 - 但我不希望code上飞。

You could possibly make it faster in unmanaged code by making it compare 32 or 64 bits at a time instead of 8 - but I wouldn't like to code that on the fly.

 
精彩推荐
图片推荐