首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板