ホームページ >バックエンド開発 >C++ >C# でバイト配列内のバイト パターンを効率的に見つけるにはどうすればよいですか?

C# でバイト配列内のバイト パターンを効率的に見つけるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 17:48:13289ブラウズ

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

C# バイト配列パターン検索

提供されたバイト配列内の指定されたバイト パターンの位置は、さまざまな効率的な方法を使用して決定できます。

Locate メソッドを使用する

次の 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 メソッドを使用します

あるいは、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。