Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conversion de caractère en binaire

    28 mars 2017 à 15:10:09

    Bonjour,

    Je voudrais coder une fonction qui transforme une lettre en un nombre binaire à 5 digits.

    Voici le prototype de la fonction auquel j'ai pensé:

    int* encrypt_binaire(char lettre);

    J'aimerais transformer les caractères selon la logique suivante:

    "A"=00000, "B"=00001, ... , "Z"=11001, " "=11010, "."=11011, ","=11100, "'"=11101, "!"=11110, "?"=11111

    En récupérant si possible le nombre binaire sous forme de tableau.

    Cependant je bloque sur les pistes à parcourir, je n'ai eu pour l'instant que l'idée d'un switch où je testerai chaque cas possible mais ça me semble être fastidieux et pas du tout optimal.

    Merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      28 mars 2017 à 15:42:53

      Bonjour,

      les solutions sont nombreuses :

      • switch ou if
      • tableau ou liste précalculés
      • ...
      • Partager sur Facebook
      • Partager sur Twitter
      First solve the problem. Then, write the code. ~ John Johnson
        28 mars 2017 à 15:47:19

        int* encrypt_binaire(char lettre)
        {
            int tab[4];
        
            switch(lettre)
            {
            case 'A' :
                tab[0]=0,tab[1]=0,tab[2]=0,tab[3]=0,tab[4]=0;
                return tab;
            case 'B' :
                 tab[0]=0,tab[1]=0,tab[2]=0,tab[3]=0,tab[4]=1;
                 return tab;
            case 'C' :
                tab[0]=0,tab[1]=0,tab[2]=0,tab[3]=1,tab[4]=0;
                return tab;
            case 'D' :
                tab[0]=0,tab[1]=0,tab[2]=0,tab[3]=1,tab[4]=1;
                return tab;
            case 'E' : tab[0]=0,tab[1]=0,tab[2]=1,tab[3]=0,tab[4]=0;
                return tab;
            case 'F' : tab[0]=0,tab[1]=0,tab[2]=1,tab[3]=0,tab[4]=1;
                return tab;
            case 'G' : tab[0]=0,tab[1]=0,tab[2]=1,tab[3]=1,tab[4]=0;
                return tab;
            case 'H' : tab[0]=0,tab[1]=0,tab[2]=1,tab[3]=1,tab[4]=1;
                return tab;
            case 'I' : tab[0]=0,tab[1]=1,tab[2]=0,tab[3]=0,tab[4]=0;
                return tab;
            case 'J' : tab[0]=0,tab[1]=1,tab[2]=0,tab[3]=0,tab[4]=1;
                return tab;
            case 'K' : tab[0]=0,tab[1]=1,tab[2]=0,tab[3]=1,tab[4]=0;
                return tab;
            case 'L' : tab[0]=0,tab[1]=1,tab[2]=0,tab[3]=1,tab[4]=1;
                return tab;
            case 'M' : tab[0]=0,tab[1]=1,tab[2]=1,tab[3]=0,tab[4]=0;
                return tab;
            case 'N' : tab[0]=0,tab[1]=1,tab[2]=1,tab[3]=0,tab[4]=1;
                return tab;
            case 'O' : tab[0]=0,tab[1]=1,tab[2]=1,tab[3]=1,tab[4]=0;
                return tab;
            case 'P' : tab[0]=0,tab[1]=1,tab[2]=1,tab[3]=1,tab[4]=1;
                return tab;
            case 'Q' : tab[0]=1,tab[1]=0,tab[2]=0,tab[3]=0,tab[4]=0;
                return tab;
            case 'R' : tab[0]=1,tab[1]=0,tab[2]=0,tab[3]=0,tab[4]=1;
                return tab;
            case 'S' : tab[0]=1,tab[1]=0,tab[2]=0,tab[3]=1,tab[4]=0;
                return tab;
            case 'T' : tab[0]=1,tab[1]=0,tab[2]=0,tab[3]=1,tab[4]=1;
                return tab;
            case 'U' : tab[0]=1,tab[1]=0,tab[2]=1,tab[3]=0,tab[4]=0;
                return tab;
            case 'V' : tab[0]=1,tab[1]=0,tab[2]=1,tab[3]=0,tab[4]=1;
                return tab;
            case 'W' : tab[0]=1,tab[1]=0,tab[2]=1,tab[3]=1,tab[4]=0;
                return tab;
            case 'X' : tab[0]=1,tab[1]=0,tab[2]=1,tab[3]=1,tab[4]=1;
                return tab;
            case 'Y' : tab[0]=1,tab[1]=1,tab[2]=0,tab[3]=0,tab[4]=0;
                return tab;
            case 'Z' : tab[0]=1,tab[1]=1,tab[2]=0,tab[3]=0,tab[4]=1;
                return tab;
            case ' ' : tab[0]=1,tab[1]=1,tab[2]=0,tab[3]=1,tab[4]=0;
                return tab;
            case '.' : tab[0]=1,tab[1]=1,tab[2]=0,tab[3]=1,tab[4]=1;
                return tab;
            case ',' : tab[0]=1,tab[1]=1,tab[2]=1,tab[3]=0,tab[4]=0;
                return tab;
            case 39 : tab[0]=1,tab[1]=1,tab[2]=1,tab[3]=0,tab[4]=1;
                return tab; /*le 39 à remplacer par une single quote*/
            case '!' : tab[0]=1,tab[1]=1,tab[2]=1,tab[3]=1,tab[4]=0;
                return tab;
            case '?' : tab[0]=1,tab[1]=1,tab[2]=1,tab[3]=1,tab[4]=1;
                return tab;
            default :
                printf("Erreur, caractere non compatible");
                break;
            }
        }

         Voici que j'ai déjà pu faire, c'est assez long et indigeste, de plus je ne vois pas comment je pourrais passer en argument la single quote.

        Si vous aviez des idées pour rendre cela mieux écrit je suis preneur merci

        -
        Edité par YouLki 28 mars 2017 à 15:47:36

        • Partager sur Facebook
        • Partager sur Twitter
          28 mars 2017 à 15:49:46

          Bonjour,

          connais-tu le code ASCII?


          ce qui peut simplifier ton switch, ou if else if ... par,

          char code;
          
          if(lettre >= 'A' && lettre <= 'Z')
              code = lettre - 'A';
          else if(lettre == ' ')
              code = 26;
          .....
          
          tableau = convertir_code_sur_5_digits(code);

          Si la lettre vaut A, code sera égal à 0.

          lettre vaut Z, code sera égal à 25, (1 1001)


          Ensuite il restera plus qu'a extraire les bits de la variable code dans un tableau par l'intermédiaire d'un autre fonction.

          Pour pouvoir utiliser le guillemet, il faut utiliser \ ce qui donne '\'' (guillemet simple, back-slash, guillemet simple, guillemet simple)

          -
          Edité par cauld 28 mars 2017 à 15:57:39

          • Partager sur Facebook
          • Partager sur Twitter
            28 mars 2017 à 16:34:17

            Ou si tu n'as pas de souci de place un tableau (en considérant ton prototype comme fixe) :

            int* encrypt_binaire(char lettre)
            {
                static int conv[256][5] = {
                  ['A'] = {0,0,0,0,0},
                  ['B'] = {0,0,0,0,1},
                  ...
                };
            
                // soit tu renvoies directement la donnée statique
                // mais l'utilisateur ne devra jamais la modifier
                // return conv[(unsigned char) lettre];
                // soit tu renvoie une copie, l'utilisateur en sera
                // le responsable, il lui faudra la libérer
                return copy(conv[(unsigned char) lettre];
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
            First solve the problem. Then, write the code. ~ John Johnson

            Conversion de caractère en binaire

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown