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)
....
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.