确定指定字节模式在提供的字节数组中的位置,可以使用多种高效的方法来实现。
一种直接的方法是使用 Locate 方法,如下面的 C# 代码片段所示:
<code class="language-csharp">static int[] Locate(this byte[] self, byte[] pattern) { if (IsEmptyLocate(self, pattern)) return Empty; var list = new List<int>(); for (int i = 0; i < self.Length; i++) { if (IsMatch(self, pattern, i)) { list.Add(i); } } return list.ToArray(); }</code>
此方法首先检查空输入或无效的搜索条件。如果满足这些条件,则返回空数组。否则,它会遍历输入数组,并使用 IsMatch 辅助方法检查每个位置的模式是否匹配。找到匹配的位置将存储在一个列表中,并作为数组返回。
或者,您可以考虑使用 SearchBytePattern 方法。它也提供了在字节数组中进行高效模式匹配的功能:
<code class="language-csharp">public static List<int> SearchBytePattern(byte[] byteArray, List<byte> bytePattern) { int start = -1; List<int> matches = new List<int>(); for (int i = 0; i < byteArray.Length; i++) { if (byteArray[i] == bytePattern[0]) { start = i; bool match = true; for (int j = 1; j < bytePattern.Count; j++) { if (i + j >= byteArray.Length || byteArray[i + j] != bytePattern[j]) { match = false; break; } } if (match) { matches.Add(start); } } } return matches; }</code>
在这个实现中,该方法接收一个字节数组和一个字节模式作为输入,并维护一个潜在匹配的起始位置。它遍历数组,检查每个位置的字节是否与模式中相应的字节匹配。当找到完全匹配时,它会将匹配的起始位置添加到匹配位置列表中。
以上是如何在 C# 中有效地查找字节数组中的字节模式?的详细内容。更多信息请关注PHP中文网其他相关文章!