c# - 从字节数组中获取字节 block 的起始位置

标签 c# .net algorithm arrays

<分区>

假设我有一个大小为 4096 的字节数组,什么是获取一大块起始位置的有效方法... 5 个与模式匹配的字节?

例如,我想获取字节数组第一个可能匹配项的起始位置

var match = new byte[] { 0x03, 0x04, 0x05, 0x06, 0x07 };

因此,如果在我的字节数组中找到上述 block ,它将返回第一个字节 (0x03) 的位置

最佳答案

您可以使用 Linq:

public static int IndexOfArray<T>(T[] source, T[] search)
{

    var result = Enumerable.Range(0, source.Length - search.Length)
                           .Select(i => new
                           {
                               Index = i,
                               Found = source.Skip(i)
                                  .Take(search.Length)
                                  .SequenceEqual(search)
                           })
                           .FirstOrDefault(e => e.Found);
    return result == null ? -1 : result.Index;
}        

关于c# - 从字节数组中获取字节 block 的起始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17400378/

相关文章:

c# - 由特定通用包含接口(interface)参数化的通用容器接口(interface)

c# - 在 C# 中向许多收件人发送电子邮件检查哪个失败

c# - 在 .NET、C# 中绘制形状的形状线问题

c# - PrintNormal() 问题 'It is not Initialized'

algorithm - 物体定位算法

c# - 一些 MVVM 问题(WPF C#)

c# - 限制 Web 客户端使用 wifi 或以太网,反之亦然

c# - .NET 的 Double.ToString 方法中的两次错误

algorithm - 配对数字的贪心算法使最大和最小化

java - 如何有效地限制 Java 中函数(任意时间算法)的时间?