Heim > Backend-Entwicklung > C++ > Wie kann ich in C# effizient alle Vorkommen eines Byte-Array-Musters in einem anderen finden?

Wie kann ich in C# effizient alle Vorkommen eines Byte-Array-Musters in einem anderen finden?

Patricia Arquette
Freigeben: 2025-01-20 18:01:13
Original
253 Leute haben es durchsucht

Finden Sie effizient alle Vorkommen eines Byte-Array-Musters in einem anderen Byte-Array in C#

Frage:

Bestimmen Sie anhand von zwei Byte-Arrays, von denen eines das Muster darstellt und das andere die zu durchsuchenden Daten enthält, wo im Datenarray das Muster übereinstimmt.

Lösung:

Der bereitgestellte Code bietet eine effiziente und prägnante Lösung mit der Locate-Erweiterungsmethode:

<code class="language-csharp">public static int[] Locate(this byte[] self, byte[] candidate)
{
    if (IsEmptyLocate(self, candidate))
        return Empty;

    var list = new List<int>();

    for (int i = 0; i < self.Length; i++)
    {
        if (i + candidate.Length > self.Length)
            break;

        bool match = true;
        for (int j = 0; j < candidate.Length; j++)
        {
            if (self[i + j] != candidate[j])
            {
                match = false;
                break;
            }
        }
        if (match)
            list.Add(i);
    }

    return list.ToArray();
}

private static bool IsEmptyLocate(byte[] self, byte[] candidate)
{
    return self == null || self.Length == 0 || candidate == null || candidate.Length == 0 || candidate.Length > self.Length;
}

private static readonly int[] Empty = new int[0];</code>
Nach dem Login kopieren

Die Locate-Methode durchläuft das Datenarray und prüft, wie jede mögliche Startposition mit dem Muster übereinstimmt. Wenn es eine Übereinstimmung gibt, tragen Sie die Position in die Liste ein. Andernfalls fahren Sie mit der nächsten Position fort.

Beispiel:

<code class="language-csharp">// 示例字节数组
byte[] pattern = new byte[] { 12, 3, 5, 76, 8, 0, 6, 125 };
byte[] toBeSearched = new byte[] { 23, 36, 43, 76, 125, 56, 34, 234, 12, 3, 5, 76, 8, 0, 6, 125, 234, 56, 211, 122, 22, 4, 7, 89, 76, 64, 12, 3, 5, 76, 8, 0, 6, 125 };

// 定位并打印匹配位置
foreach (var position in toBeSearched.Locate(pattern))
    Console.WriteLine(position);</code>
Nach dem Login kopieren

How Can I Efficiently Find All Occurrences of a Byte Array Pattern within Another in C#?

Dieser Code ändert den ursprünglichen Code geringfügig, um ihn verständlicher zu machen, und fügt die Behandlung leerer Arrays und Fälle hinzu, in denen die Musterlänge größer als die Datenlänge ist. IsEmptyLocate Funktionen verbessern die Lesbarkeit und Wartbarkeit des Codes.

Das obige ist der detaillierte Inhalt vonWie kann ich in C# effizient alle Vorkommen eines Byte-Array-Musters in einem anderen finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage