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>
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>
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!