Maison >développement back-end >C++ >Comment puis-je trouver efficacement un modèle d'octets dans un tableau d'octets en C# ?

Comment puis-je trouver efficacement un modèle d'octets dans un tableau d'octets en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 17:48:13288parcourir

How Can I Efficiently Find a Byte Pattern Within a Byte Array in C#?

Recherche de modèle de tableau d'octets 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.

Utiliser la méthode Locate

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.

Utilisez la méthode SearchBytePattern

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn