2013-07-01 146 views
3

假設我有一個大小爲4096的字節數組,有什麼方法可以有效地獲得塊的開始位置......匹配模式的5個字節?從字節數組中獲取字節塊的起始位置

對於例如,我想獲得的字節數組

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

所以一號可能匹配的起始位置,如果上面的大塊是我的字節數組中找到,它會返回我的位置第1字節(0×03)

+0

如果{0×03,0×05},你會希望看到這樣的結果您的搜索模式? – Tigran

+0

這可能會幫助你:http://stackoverflow.com/questions/3028768/net-regular-expressions-on-bytes-instead-of-chars – Regenschein

+2

也看到這個答案,它使用Boyer-Moore模式匹配算法(這是可能是我會去的):http://stackoverflow.com/a/9890164/106159 –

回答

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; 
}   
相關問題