3
假設我有一個大小爲4096的字節數組,有什麼方法可以有效地獲得塊的開始位置......匹配模式的5個字節?從字節數組中獲取字節塊的起始位置
對於例如,我想獲得的字節數組
var match = new byte[] { 0x03, 0x04, 0x05, 0x06, 0x07 };
所以一號可能匹配的起始位置,如果上面的大塊是我的字節數組中找到,它會返回我的位置第1字節(0×03)
假設我有一個大小爲4096的字節數組,有什麼方法可以有效地獲得塊的開始位置......匹配模式的5個字節?從字節數組中獲取字節塊的起始位置
對於例如,我想獲得的字節數組
var match = new byte[] { 0x03, 0x04, 0x05, 0x06, 0x07 };
所以一號可能匹配的起始位置,如果上面的大塊是我的字節數組中找到,它會返回我的位置第1字節(0×03)
您可以使用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;
}
如果{0×03,0×05},你會希望看到這樣的結果您的搜索模式? – Tigran
這可能會幫助你:http://stackoverflow.com/questions/3028768/net-regular-expressions-on-bytes-instead-of-chars – Regenschein
也看到這個答案,它使用Boyer-Moore模式匹配算法(這是可能是我會去的):http://stackoverflow.com/a/9890164/106159 –