从字节数组中获取字节块的起始位置

时间:2013-07-01 08:41:09

标签: c# .net arrays algorithm bytearray

假设我有一个大小为4096的字节数组,有什么方法可以获得一块相当于模式的5字节的起始位置?

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

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用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;
}