Remplacer une séquence de byte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 146 fois - Téléchargée 18 fois

Contenu du snippet

Cette méthode sert à remplacer simultanément dans une séquence byte[] A toutes les sous-séquences byte[] B par des séquences byte[] C de même longueur, par index croissant.

- Par remplacement simultané, j'entends qu'une partie de la séquence de remplacement ne pourra être pas être détectée comme faisant partie de la sous-séquence à remplacer;
- Par index croissant, j'entends que les remplacements sont effectués aussitôt une correspondance établie, en partant de l'index [0] de la séquence byte[] A.

Source / Exemple :


static void Replace (byte[] OriginalSequence, byte[] OriginalSubsequence, byte[] ReplacementSequence)
    {
        if (OriginalSequence == null)
            throw new ArgumentNullException ();
        if (OriginalSubsequence == null)
            throw new ArgumentNullException ();
        if (ReplacementSequence == null)
            throw new ArgumentNullException ();
        if (OriginalSubsequence.Length != ReplacementSequence.Length)
            throw new ArgumentException ();
        if (OriginalSubsequence.Length == 0)
            throw new ArgumentException ();
        if (OriginalSubsequence.Length > OriginalSequence.Length)
            throw new ArgumentException ();

        for (int i = 0; i < OriginalSequence.Length - (OriginalSubsequence.Length - 1); i++)
        // Pour chaque byte de OriginalSequence jusqu'au dernier emplacement possible pour une occurence de la longueur de OriginalSubsequence
        {
            for (int j = 0; j < OriginalSubsequence.Length; j++)
            // Pour chaque byte de OriginalSubsequence
            {
                if (OriginalSequence[i + j] != OriginalSubsequence[j])
                // Si les bytes ne sont pas identiques, on casse la seconde boucle pour continuer la première au byte suivant
                    break;
                
                if (j == OriginalSubsequence.Length - 1)
                // S'ils sont toujours identiques au dernier byte, on entame la substitution
                {
                    for (int k = 0; k < OriginalSubsequence.Length; k++)
                    {
                        OriginalSequence[i + k] = ReplacementSequence[k];
                    }
                    // Puis on avance dans OriginalSequence jusqu'à la fin de la sous-séquence remplacée
                    i += OriginalSubsequence.Length - 1;
                }
            }
        }
    }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.