Conversion ascii-8 - binaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 36 568 fois - Téléchargée 27 fois

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

Ajouter un commentaire Commentaires
cs_jadoui Messages postés 2 Date d'inscription samedi 13 septembre 2008 Statut Membre Dernière intervention 24 novembre 2008
24 nov. 2008 à 11:54
je veux selection sur datagridview le premier colonne et ajouter dans le textbox
k_hammami Messages postés 10 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 28 décembre 2007
12 mars 2007 à 12:59
Salut,se sont très utiles vos codes, bravo badr. J'ai comme même quelque problèmes que j'aime bien à vos poser. L'histoire consiste à la manipulation des fichiers codés avec le code page 710 (transparent arabic).j'ai essayé de les lire convenablement ,mais sans résultat.j'ai pensé à les convertir en ascii ou en binaire pour les lire par la suite dans un code page plus connu comme le 720.ce problème me pose beaucoup de soucie dans mon travaille. merci et bon courage.

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.