3

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

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

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

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

4

1 回答 1

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;
}        
于 2013-07-01T08:52:27.150 回答