使用C# ArraySegment的问题

问题描述 投票:0回答:1

我有一个文件中所有字节的数组。

{ 0xA0, 0x00, 0xFF, 0xFF, 0xA0, 0x10, 0x01, 0x00, 0x10, 0x32, 0x0D, 0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x2C, 0x00, 0x20, 0x00, 0x77, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x6C, 0x00, 0x64, 0x00, 0x21, 0x00, 0xF0, 0xF0 }

我也有一个函数,读取文件中的某一部分,并将其位置向前移动。(比如 BinaryReader.ReadX() 除了在一个数组中。

    private static byte[] readBytes(int length)
    {
        cursorLocation += length;
        return new ArraySegment<byte>(bytes, cursorLocation-length, length).ToArray();
    }

但是,当我试图测试某一段字节是否相同时,似乎并不成功。例如,这个

    byte[] startup = readBytes(4);

    if (startup == new byte[] { 0xA0, 0x00, 0xFF, 0xFF })
    {
        Console.WriteLine("Matches");
    } else
    {
        Console.WriteLine("Does not match.");
    }

返回 "不匹配",而不是 "匹配"。我也试过比较每一行的数组片,但也不行。将它们打印成一行,比如这样。

Console.WriteLine(startup[0]);
Console.WriteLine(startup[1]);
Console.WriteLine(startup[2]);
Console.WriteLine(startup[3]);

返回,正如我所料。

160
0
255
255

我真的不知道哪里出了问题 任何帮助都会非常感激。非常感谢

c# arrays .net console console-application
1个回答
1
投票

除了我上面的评论之外,这里还有一个方法的实现,你可以用它来比较数组。

    private static bool AreByteArraysEqual(byte[] expected, byte[] actual)
    {
        return expected != null
            && actual != null
            && expected.Length == actual.Length 
            && Enumerable.Range(0, actual.Length - 1)
                         .All(i => expected[i] == actual[i]);
    }

在你的例子中,使用==来比较两个数组会返回false,因为这个操作符通过比较它们的引用来检查两个数组是否是同一个实例,Marc Gravell已经在他的评论中指出了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.