2013-08-20 11 views
7

Desidero un modo veramente semplice per stampare la rappresentazione binaria di un carattere. Non riesco a trovare alcun codice di esempio da nessuna parte.Stampa di una rappresentazione binaria di un carattere in C

Immaginavo che potessi farlo in poche righe, ma tutto quello che trovo è troppo lungo e complesso, utilizzando molte funzioni che non ho mai usato prima. atoi arriva molto ma non è standard.

Esiste una funzione semplice o un modo semplice di scrivere una funzione per prendere una variabile char e quindi stampare una rappresentazione binaria?

Ad esempio: char 'x' è l'argomento assunto dalla funzione e "x is 0111 1000" viene stampato.

È per un incarico scolastico in cui devo prendere l'input dell'utente di una stringa e stampare la stringa in binario. Ho solo bisogno di avere le basi per convertire un char in binario, ma al momento sto lottando.

+1

dovresti pubblicare il tuo tentativo ... –

+0

http://stackoverflow.com/questions/7863499/conversion-of-char-to-binary-in-c – rags

+0

http://stackoverflow.com/questions/4892579/how -to-convert-a-char-to-binary – rags

risposta

13

Quello che si vorrebbe fare è usare gli operatori bit a bit per mascherare i bit uno per uno e stamparli sullo standard output.

  1. Un char in C è garantito essere 1 byte, così loop 8.
  2. All'interno di ogni iterazione, maschera il bit di ordine più alto.
  3. Una volta ottenuto, è sufficiente stamparlo sullo standard output.

Ecco una rapida pugnalata che fa si spera senso ...

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

    return 0; 
} 

CodePad.

Per ottenere il bit, sposto verso sinistra per ottenere il bit numerato (dal più alto al più basso, quindi stamparlo è facile) e quindi mascherarlo. Quindi lo traduco in 0 o 1 con !!.

+0

Questo è perfetto, esattamente quello che stavo cercando! Leggerò mascherando gli operatori di turno in modo che io possa capirlo completamente. Se hai il tempo, potresti spiegare cosa significa "maschera del bit di ordine più alto". Con la mia conoscenza attuale non sono sicuro al 100% di ciò che sta accadendo sulla linea principale all'interno del ciclo for. Grazie! – user1783150

+0

@ user1783150 Il bit di ordine superiore è il 7 ° bit, ad es. il '1' in' 1000000' (anche il numero '0x80' o' 128'). – alex

+0

Sono ancora un po 'curioso di sapere come "!!" l'operatore lavora? Converte qualsiasi numero positivo in "1" e mantiene 0 come "0"? Un google di "" !! " l'operatore C 'non ha restituito alcun risultato a essere onesti. Non è un operatore standard? – user1783150

2

è possibile utilizzare questo metodo

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; 
} 

per ottenere la rappresentazione binaria e stampare con essa

ad esempio

printf("%s\n", byte_to_binary(15)); 
1
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; 
} 
0

Prova questo: -

#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; 
}