假设我有一个大小为 4096 的字节数组,什么是获取与模式匹配的一个块的起始位置的有效方法... 5 个字节?
例如,我想获取字节数组的第一个可能匹配的起始位置
var match = new byte[] { 0x03, 0x04, 0x05, 0x06, 0x07 };
因此,如果在我的字节数组中找到上述块,它将返回第一个字节的位置(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;
}