確定指定位元組模式在提供的位元組數組中的位置,可以使用多種高效的方法來實現。
一種直接的方法是使用 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中文網其他相關文章!