Conversion ascii-8 - binaire

Contenu du snippet

Salut;
Voici une classe à but pédagogique qui convertit un "string ascii" vers un "string binaire".
En .Net, la classe String stocke les données en Unicode (le format est propre à .net). Ce format est toutefois "Ascii Compatible" comme l'UTF-8. Voilà pourquoi je me permets de dire "string ascii".

Ce code permettra aux débutants de voir l'utilité des opérateurs binaires. En effet, je m'en sers ici beaucoup pour la conversion.
Le code est aussi très bien commenté.

Source / Exemple :


using System;
using System.Text;

namespace AsciiBinary
{
    class AsciiBinaryConverter
    {
        #region BinaryToAscii
        public static string BinaryToAscii(string bin, bool display)
        {
            //chaine contenant le texte final
            string ascii = null;
            //charAsciiCode : code ascii du caractère 8 bits
            //j : indicateur pour les opérations binaires
            //j : 10000000 (en binaire)
            int charAsciiCode = 0, j = 1 << 7;
            //on s'assure que la taille est un multiple de 8
            if ((bin.Length % 8) != 0) throw new Exception("La longueur de la chaine n'est pas divisible par huit.");
            //on parcoure le tableau
            for (int i = 0; i < bin.Length; i++)
            {
                //si on rencontre un 1 alors...
                if (bin[i] == '1')
                {
                    //l'opérateur binaire | (ou)
                    //permet de placer le bit de j sur charAsciiCode
                    //exemple :
                        //j : 00100000
                        //charAsciiCode : 10000000
                        //alors j | charAsciiCode = 10100000
                    charAsciiCode = j | charAsciiCode;
                }
                //on s'assure que le caractère n'est pas différent de 1 et de 0
                else if (bin[i] != '0') throw new Exception("Seulement les caractères 1 et 0 sont acceptés.");
                //à chaque 8 caractères analysés (dans le string bin)...
                if (((i+1) % 8) == 0 && i > 0)
                {
                    //on transforme charAsciiCode en carctère et on l'ajoute à la chaine finale (ascii)
                    ascii += (char)charAsciiCode;
                    //si diplay == true, on affiche le code binaire + le carctère
                    if (display) Console.WriteLine(bin.Substring(i - 7, 8) + " : " + (char)charAsciiCode);
                    //j est remis sur 128 : 10000000 (en binaire)
                    j = 1 << 7;
                    //charAsciiCode est remis à 0 : 00000000 (en binaire)
                    charAsciiCode = 0;                    
                }
                //sinon on décale le bit de j vers la droite
                //exemple :
                    //j initiale : 01000000
                    //j après >> 1 : 00100000
                else j = j >> 1;
            }
            //retourne la chaine ascii
            return ascii;
        }
        public static string BinaryToAscii(string bin)
        {
            return BinaryToAscii(bin, false);
        }
        #endregion

        #region AsciiToBinary
        public static string AsciiToBinary(string ascii, bool display)
        {
            //chaine contenant le code binaire final
            string binary = null;
            //j : indicateur pour les opérations binaires
            int j = 0;
            //on parcourt la chaine ascii
            for (int i = 0; i < ascii.Length; i++)
            {
                //j est mis sur 128 : 10000000 (en binaire)
                j = 1 << 7;
                if(display) Console.Write(ascii[i] + " :\t");
                //durant cette boucle, le bit 1 de j sera déplacé vers la droite
                for (int k = 0; k < 8; k++)
                {
                    //si l'opérateur & (AND) est différent de 0
                    if ((ascii[i] & j) != 0)
                    {
                        //ajouter le caractère 1 à la chaine binary
                        if (display) Console.Write("1");
                        binary += "1";
                    }
                    //sinon
                    else
                    {
                        //ajouter le caractère 0 à la chaine binary
                        if (display) Console.Write("0");
                        binary += "0";
                    }
                    //on décale le bit de j vers la droite
                    //exemple :
                        //j initiale : 01000000
                        //j après >> 1 : 00100000
                    j = j >> 1;
                }
                if (display) Console.WriteLine();
            }
            //on retourne le code binaire de ascii sous forme de string
            return binary;
        }
        public static string AsciiToBinary(string ascii)
        {
            return AsciiToBinary(ascii, false);
        }
        #endregion
    }
}

Conclusion :


Des lectures interessantes :
http://developpeur.journaldunet.com/tutoriel/theo/031126theo_bit1a.shtml (Opérateurs binaires)
http://developpeur.journaldunet.com/tutoriel/theo/031126theo_bit1a.shtml (ASCII -7)
http://fr.wikipedia.org/wiki/ISO_8859-1 (Latin-1 ASCII ÉTENDUE)
http://www.labo-dotnet.com/articles/Csharp/Unicode-et-dotNET/0/1720.aspx (Unicode et .net)
....

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.