Convertir un caractères en binaire

Signaler
Messages postés
20
Date d'inscription
jeudi 7 août 2008
Statut
Membre
Dernière intervention
29 novembre 2008
-
ciberrique
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
bonjours tous,

 Je  suis débutant en Programmation et je veut créer en langage C un prog qui permet de convertir un message txt en binaire... en passant par les étapes suivantes:
- convertir les caractères en code ASCII.
- convertir le code ASCII résultant en binaire.

Merci de votre aide d'avance.

NB: je veu le crée juste en C et pa en C++

bonne journée

3 réponses

Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010

En C les char sont deja des entiers (donc code ascii) par conséquent il ne reste plus qu'a convertir en binaire :

avec un code que j'ai trouvé en quelques secondes sur le site pour convertir entier en binaire voici un exemple :

void IntToBin(int n, char *psz)
{
  if(!n) *psz++ = 48;
  else {
    while(!(n & 0x80000000)) n <<= 1;
    while(n) {
      *psz++ = (n & 0x80000000) ? 49: 48;
      n <<= 1;
    }
  }
  *psz = 0;
}




int main()
{
    char a = 'a';
    char *bin = new char[8];      //8 bits doivent suffirent


    IntToBin((int)a, bin);      //Conversion


    printf("%s",bin);   //Affichage du resultat


    return 0;
}

Pour convertir un texte, tu as juste a modifier ce code pour faire une boucle sur le nombre de lettre. Si c'est pas clair demande.





<hr />


Encore plus de source et de tutoriels.
Messages postés
20
Date d'inscription
jeudi 7 août 2008
Statut
Membre
Dernière intervention
29 novembre 2008

 Bonjour ciberrique

    Merci pour votre attention et votre aide mais je suis vraiment désolé car je n'arrive pas à comprendre votre code. si c'est possible est ce que vous pouvez me l'éclairçir avec des commentaire sur chaque ligne surtout concernant le code de la fonction "IntToBin" .

void IntToBin(int n, char *psz)
{
  if(!n) *psz++ = 48;
  else {
    while(!(n & 0x80000000)) n <<= 1;
    while(n) {
      *psz++ = (n & 0x80000000) ? 49: 48;
      n <<= 1;
    }
  }
  *psz = 0;
}

int main()
{
    char a = 'a';
    char *bin = new char[8];      //8 bits doivent suffirent

    IntToBin((int)a, bin);      //Conversion

    printf("%s",bin);   //Affichage du resultat

    return 0;
}

Merci de votre aide d'avance.

bonne journée
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010

La fonction IntToBin n'est pas de moi comme je l'ai dis je l'ai trouvé sur une source de cppfrance, voici donc ce que je peux commenter :

void IntToBin(int n, char *psz)   //n = l'entier a convertir, *psz  un pointeur sur un tableau de caractere
{  if(!n) *psz++ 48;                                    //si n 0, psz[0] = 0   (0 en ascii = 48)
  else {                                                         //sinon    while(!(n & 0x80000000)) n <<1;         // tant que n & 0x80000000   (la valeur binaire de n ET (bit a bit) 0x80000000) 0 alor n * 2 (decalage des bits de un 0 a vers la gauche)

    while(n) {                                                //tant que n !=0      *psz++ (n & 0x80000000) ? 49: 48;        //psz[i] si (n & 0x80000000) == true alors 49 (49 en ascii = 1) sinon 48 (0)
      n <<= 1;                                                      //decalage d'un 0 des bits de n vers la gauche
    }
  }
  *psz = 0;         // on met le pointeur a nul
}

//Donc en gros si j'ai bien compris (aux autres utilisateurs du forum de me corriger),
//si n = 0 alors la valeur binaire est 0 sinon
//tant que n & 0x80000000 != 0x80000000 on multiplie n par 2
//tant que (n)
//psz[i] =  0 si n & 0x80000000 est paire 1 sinon
// en faite on traite le dernier bit comme si c'etait le reste de la division par 2 (si je me trompe pas) du coup ca reviens au meme que le calcul par division mais avec des multiplication par 2.

int main()
{
    char a = 'a';                           //Un char que j'initialise avec 'a'
    char *bin = new char[8];      //8 bits doivent suffirent, en faite c'est pour stocker le resultat de l'appel de la fonction IntToBin

    IntToBin((int)a, bin);      //Conversion, appel de la fonction IntToBin, en castant (int) a on obtient la valeur asci car les char sont en faite des entiers

    printf("%s",bin);   //Affichage du resultat

    return 0;
}

<hr />www.e-fitz.com
Encore plus de source et de tutoriels.