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.
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.
char
en C est garanti être un octet, donc boucle à 8
.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 !!
.
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));
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;
}
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;
}