Conversão de Char para Binário em C

Eu estou tentando converter um caractere para sua representação binária (assim character -> ascii hex -> binary).

Eu sei fazer isso eu preciso mudar e AND . No entanto, meu código não está funcionando por algum motivo.

Aqui está o que tenho. *temp aponta para um índice em uma string C.

 char c; int j; for (j = i-1; j >= ptrPos; j--) { char x = *temp; c = (x >> i) & 1; printf("%d\n", c); temp--; } 

Mostramos duas funções que imprimem um caractere SINGLE para binário.

 void printbinchar(char character) { char output[9]; itoa(character, output, 2); printf("%s\n", output); } 

printbinchar (10) vai escrever no console

  1010 

itoa é uma function de biblioteca que converte um único valor inteiro em uma string com a base especificada. Por exemplo … itoa (1341, saída, 10) irá escrever na seqüência de saída “1341”. E é claro que itoa (9, saída, 2) irá escrever na string de saída “1001”.

A próxima function imprimirá na saída padrão a representação binária completa de um caractere, isto é, imprimirá todos os 8 bits, também se os bits mais altos forem zero.

 void printbincharpad(char c) { for (int i = 7; i >= 0; --i) { putchar( (c & (1 << i)) ? '1' : '0' ); } putchar('\n'); } 

printbincharpad (10) irá gravar no console

  00001010 

Agora eu apresento uma function que imprime uma string inteira (sem último caractere nulo).

 void printstringasbinary(char* s) { // A small 9 characters buffer we use to perform the conversion char output[9]; // Until the first character pointed by s is not a null character // that indicates end of string... while (*s) { // Convert the first character of the string to binary using itoa. // Characters in c are just 8 bit integers, at least, in noawdays computers. itoa(*s, output, 2); // print out our string and let's write a new line. puts(output); // we advance our string by one character, // If our original string was "ABC" now we are pointing at "BC". ++s; } } 

Considere, no entanto, que itoa não adiciona zeros de preenchimento, então printstringasbinary ("AB1") irá imprimir algo como:

 1000001 1000010 110001 

Seu código é muito vago e não é compreensível, mas posso fornecer uma alternativa.

Primeiro de tudo, se você quiser que o temp passe por toda a string, você pode fazer algo assim:

 char *temp; for (temp = your_string; *temp; ++temp) /* do something with *temp */ 

O termo *temp como a condição for simplesmente verifica se você chegou ao final da string ou não. Se você tiver, a *temp será '\0' ( NUL ) e a for extremidades.

Agora, dentro do for, você quer encontrar os bits que compõem *temp . Vamos dizer que imprimimos os bits:

 for (as above) { int bit_index; for (bit_index = 7; bit_index >= 0; --bit_index) { int bit = *temp >> bit_index & 1; printf("%d", bit); } printf("\n"); } 

Para torná-lo um pouco mais genérico, ou seja, para converter qualquer tipo em bits, você pode alterar o bit_index = 7 para bit_index = sizeof(*temp)*8-1

 unsigned char c; for( int i = 7; i >= 0; i-- ) { printf( "%d", ( c >> i ) & 1 ? 1 : 0 ); } printf("\n"); 

Explicação:

A cada iteração, o bit mais significativo está sendo lido do byte, deslocando-o e comparando-o com binário 1.

Por exemplo, vamos supor que o valor de input seja 128, que binário se traduza a 1000 0000. Deslocá-lo por 7 dará 0000 0001, então conclui que o bit mais significativo foi 1. 0000 0001 & 1 = 1. Esse é o primeiro bit a imprimir no console. As próximas iterações resultarão em 0 … 0.

Intereting Posts