我想知道在C#中从另一个字节数组中查找子数组索引的最佳方法是什么。例如,如果我有以下作为我的主阵列。
byte[] inputArray = {0xFF,0xDD,0xA,0xF,0x1,0x2,0x78,0x05,0x00,0x01};
byte[] tobeFound = {0x78,0x05};
现在我想在inputArray中找到字节数组“tobeFound”。我应该得到索引6.这是一个简短的例子。两个阵列都可能非常大。
那我该怎么办? LINQ,Array.IndexOf ??我也需要有良好的表现。
感谢您的任何指示并分享一些经验!
答案 0 :(得分:7)
您可以使用经过充分测试的Boyer-Moore string search algorithm,因为您实际上是在搜索字符串(字节可以被视为字符)。
这里似乎是a decent implementation of Boyer-Moore in C#字符串(以及turbo Boyer-Moore和另一个我从未听说过的)。将这些转换为使用Byte[]
应该是微不足道的。