Heim > Backend-Entwicklung > C++ > Wie kann ich in C# effizient ein Bytemuster innerhalb eines Bytearrays finden?

Wie kann ich in C# effizient ein Bytemuster innerhalb eines Bytearrays finden?

Barbara Streisand
Freigeben: 2025-01-20 17:48:13
Original
338 Leute haben es durchsucht

How Can I Efficiently Find a Byte Pattern Within a Byte Array in C#?

C#-Byte-Array-Mustersuche

Die Bestimmung der Position des angegebenen Bytemusters im bereitgestellten Byte-Array kann mit verschiedenen effizienten Methoden erfolgen.

Verwenden Sie die Locate-Methode

Ein einfacher Ansatz ist die Verwendung der Locate-Methode, wie im folgenden C#-Codeausschnitt gezeigt:

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

    var list = new List<int>();

    for (int i = 0; i < self.Length; i++)
    {
        if (IsMatch(self, pattern, i))
        {
            list.Add(i);
        }
    }

    return list.ToArray();
}</code>
Nach dem Login kopieren

Diese Methode prüft zunächst, ob leere Eingaben oder ungültige Suchkriterien vorliegen. Wenn diese Bedingungen erfüllt sind, wird ein leeres Array zurückgegeben. Andernfalls wird das Eingabearray durchlaufen und mithilfe der IsMatch-Hilfsmethode überprüft, ob das Muster an jeder Position übereinstimmt. Die Positionen, an denen eine Übereinstimmung gefunden wird, werden in einer Liste gespeichert und als Array zurückgegeben.

SearchBytePattern-Methode verwenden

Alternativ können Sie die Verwendung der SearchBytePattern-Methode in Betracht ziehen. Es bietet auch Funktionen für einen effizienten Mustervergleich auf Byte-Arrays:

<code class="language-csharp">public static List<int> SearchBytePattern(byte[] byteArray, List<byte> bytePattern)
{
    int start = -1;
    List<int> matches = new List<int>();

    for (int i = 0; i < byteArray.Length; i++)
    {
        if (byteArray[i] == bytePattern[0])
        {
            start = i;
            bool match = true;
            for (int j = 1; j < bytePattern.Count; j++)
            {
                if (i + j >= byteArray.Length || byteArray[i + j] != bytePattern[j])
                {
                    match = false;
                    break;
                }
            }
            if (match)
            {
                matches.Add(start);
            }
        }
    }

    return matches;
}</code>
Nach dem Login kopieren

In dieser Implementierung empfängt die Methode ein Byte-Array und ein Byte-Muster als Eingabe und behält eine Startposition für mögliche Übereinstimmungen bei. Es durchläuft das Array und prüft, ob das Byte an jeder Position mit dem entsprechenden Byte im Muster übereinstimmt. Wenn eine genaue Übereinstimmung gefunden wird, wird die Startposition der Übereinstimmung zur Liste der übereinstimmenden Positionen hinzugefügt.

Das obige ist der detaillierte Inhalt vonWie kann ich in C# effizient ein Bytemuster innerhalb eines Bytearrays 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