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