Maison >développement back-end >C++ >Comment puis-je trouver efficacement un modèle d'octets dans un tableau d'octets en C# ?
La détermination de la position du modèle d'octet spécifié dans le tableau d'octets fourni peut être réalisée en utilisant diverses méthodes efficaces.
Une approche simple consiste à utiliser la méthode Locate, comme indiqué dans l'extrait de code C# suivant :
<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>
Cette méthode vérifie d'abord les entrées vides ou les critères de recherche invalides. Si ces conditions sont remplies, un tableau vide est renvoyé. Sinon, il parcourt le tableau d'entrée et utilise la méthode d'assistance IsMatch pour vérifier si le modèle correspond à chaque position. Les positions où une correspondance est trouvée sont stockées dans une liste et renvoyées sous forme de tableau.
Vous pouvez également envisager d'utiliser la méthode SearchBytePattern. Il fournit également des fonctionnalités pour une correspondance de modèles efficace sur les tableaux d'octets :
<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>
Dans cette implémentation, la méthode reçoit un tableau d'octets et un modèle d'octets en entrée, et maintient une position de départ pour les correspondances potentielles. Il parcourt le tableau, vérifiant si l'octet à chaque position correspond à l'octet correspondant dans le modèle. Lorsqu'une correspondance exacte est trouvée, il ajoute la position de départ de la correspondance à la liste des positions correspondantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!