提供されたバイト配列内の指定されたバイト パターンの位置は、さまざまな効率的な方法を使用して決定できます。
次の C# コード スニペットに示すように、簡単なアプローチは Locate メソッドを使用することです。
<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>
このメソッドは、最初に空の入力または無効な検索条件をチェックします。これらの条件が満たされる場合、空の配列が返されます。それ以外の場合は、入力配列を反復処理し、IsMatch ヘルパー メソッドを使用して、パターンが各位置で一致するかどうかを確認します。一致が見つかった位置はリストに保存され、配列として返されます。
あるいは、SearchBytePattern メソッドの使用を検討することもできます。また、バイト配列での効率的なパターン マッチングのための機能も提供します:
<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>
この実装では、メソッドはバイト配列とバイト パターンを入力として受け取り、潜在的な一致の開始位置を維持します。配列を反復処理して、各位置のバイトがパターン内の対応するバイトと一致するかどうかを確認します。完全一致が見つかると、一致の開始位置が一致位置のリストに追加されます。
以上がC# でバイト配列内のバイト パターンを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。