确定字节数组是否包含按特定顺序排列的字节
本文关键字:字节 定顺序 排列 包含按 是否 字节数 数组 | 更新日期: 2023-09-27 18:09:32
可能重复:
byte[]阵列模式搜索
假设我有一个字节数组:
byte[] myArray = new byte[]{1,2,3,4,5,6,7,1,9,3,4,3,4,7,6,5,6,7,8};
如何确定myArray是否包含按顺序排列的字节9、3、4、3?我是否必须遍历数组并将每个元素附加到字符串中,然后使用string.Contains((方法来知道该字节数组是否按该顺序包含这些元素?
我知道我可以做这样的事:
String s = "";
foreach(byte b in myArray)
{
s = s + b.ToString();
}
//then do
s.Contains("9343")
这在长数组上是无效的。什么是更有效的方法?
尝试以下
public static bool ContainsSequence(byte[] toSearch, byte[] toFind) {
for (var i = 0; i + toFind.Length < toSearch.Length; i++) {
var allSame = true;
for (var j = 0; j < toFind.Length; j++) {
if (toSearch[i + j] != toFind[j]) {
allSame = false;
break;
}
}
if (allSame) {
return true;
}
}
return false;
}
最简单的算法是遍历字节数组,直到在要查找的字节模式中的第一个字节上找到匹配项,然后遍历这两个字节,直到到达末尾,或者如果发现不匹配,从停止的地方继续。如果一直得到部分匹配,这可能会"降级"。根据您的需要,这可能足够好(编写简单,维护简单(。
如果这还不够快,你可以很容易地采用博耶-摩尔。