Heim >Backend-Entwicklung >C++ >Wie kann ich in C# effizient ein Bytemuster innerhalb eines Bytearrays finden?
Die Bestimmung der Position des angegebenen Bytemusters im bereitgestellten Byte-Array kann mit verschiedenen effizienten Methoden erfolgen.
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>
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.
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>
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!