web-dev-qa-db-fra.com

Impression de la représentation binaire d'un caractère en C

Je veux un moyen très simple d’imprimer la représentation binaire d’un caractère. Je n'arrive pas à trouver un exemple de code n'importe où.

Je pensais que vous pouviez le faire en quelques lignes, mais tout ce que je trouve est trop long et complexe et utilise beaucoup de fonctions que je n’avais jamais utilisées auparavant. atoi revient souvent mais ce n'est pas standard.

Existe-t-il une fonction simple ou un moyen simple d'écrire une fonction pour prendre une variable char et ensuite imprimer une représentation binaire?

Par exemple: char 'x' est l'argument pris en compte par la fonction et "x est 0111 1000" est imprimé.

C'est pour un devoir d'école où je dois prendre l'entrée d'une chaîne par l'utilisateur et l'imprimer en binaire. J'ai juste besoin de connaître les bases de la conversion d'un caractère en binaire, mais je me bats pour le moment.

9
user1783150

Ce que vous souhaitez faire est d'utiliser des opérateurs au niveau des bits pour masquer les bits un par un et les imprimer sur la sortie standard.

  1. Un char en C est garanti être un octet, donc boucle à 8.
  2. Dans chaque itération, masquez le bit de poids fort.
  3. Une fois que vous l'avez, imprimez-le simplement sur une sortie standard.

Voici un petit coup de couteau qui, espérons-le, a du sens ...

main() {
  char a = 10;
  int i;
  for (i = 0; i < 8; i++) {
      printf("%d", !!((a << i) & 0x80));
  }
  printf("\n");

  return 0;
}

CodePad .

Pour obtenir le bit, je me déplace vers la gauche pour obtenir le bit numéroté (du plus élevé au plus bas afin que l'impression soit facile) puis le masque. Je le traduis ensuite en 0 ou 1 avec !!.

16
alex

vous pouvez utiliser cette méthode

const char *byte_to_binary(int x)
{
    static char b[9];
    b[0] = '\0';

    int z;
    for (z = 128; z > 0; z >>= 1)
    {
        strcat(b, ((x & z) == z) ? "1" : "0");
    }

    return b;
}

pour obtenir la représentation binaire et imprimer avec

par exemple

 printf("%s\n", byte_to_binary(15));
2
No Idea For Name
void printBits(size_t const size, void const * const ptr)
{
    unsigned char *b = (unsigned char*) ptr;
    unsigned char byte;
    int i, j;

    for (i=size-1;i>=0;i--)
    {
        for (j=7;j>=0;j--)
        {
            byte = b[i] & (1<<j);
            byte >>= j;
            printf("%u", byte);
        }
    }
    puts("");
}

int main(int argv, char* argc[])
{
        int i = 23;
        uint ui = UINT_MAX;
        float f = 23.45f;
        printBits(sizeof(i), &i);
        printBits(sizeof(ui), &ui);
        printBits(sizeof(f), &f);
        return 0;
}
2
Optimus Prime

Essaye ça:-

#include <limits.h>
char *chartobin ( unsigned char c )
{
    static char bin[CHAR_BIT + 1] = {0};
    int i;
    for( i = CHAR_BIT - 1; i >= 0; i-- )
    {
        bin[i] = (c % 2) + '0';
        c /= 2;
    }
   return bin;
}
0
Rahul Tripathi