首頁 > 後端開發 > C++ > 如何在 C# 中有效地找到位元組數組中的位元組模式?

如何在 C# 中有效地找到位元組數組中的位元組模式?

Barbara Streisand
發布: 2025-01-20 17:48:13
原創
287 人瀏覽過

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

C# 位元組數組模式搜尋

確定指定位元組模式在提供的位元組數組中的位置,可以使用多種高效的方法來實現。

使用 Locate 方法

一種直接的方法是使用 Locate 方法,如下面的 C# 程式碼片段所示:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板