2013-08-20 19 views
7

Ich möchte eine wirklich einfache Möglichkeit, die Binärdarstellung eines Zeichens auszudrucken. Ich kann nirgendwo einen Beispielcode finden.Binärdarstellung eines Zeichens in C drucken

Ich nahm man es in ein paar Zeilen tun könnte, aber alles, was ich finde, ist zu lang und komplex viele Funktionen ich noch nicht verwendet haben. atoi kommt viel, aber es ist nicht Standard.

Gibt es eine einfache Funktion oder eine einfache Möglichkeit, eine Funktion zu schreiben, um eine Variable char zu nehmen und dann eine binäre Darstellung auszudrucken?

Eg: char 'x' ist das Argument der Funktion und "x ist 0111 1000" wird ausgedruckt aufgenommen.

Es ist für eine Schulaufgabe, wo ich Benutzereingabe einer Zeichenfolge nehmen und die Zeichenfolge binär ausdrucken muss. Ich muss nur die Grundlagen bekommen, um einen Char in Binärcode umzuwandeln, aber ich kämpfe im Moment.

+1

sollten Sie Ihren Versuch veröffentlichen ... –

+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

Antwort

13

Sie möchten bitweise Operatoren verwenden, um die Bits einzeln zu maskieren und sie auf die Standardausgabe zu drucken.

  1. A char in C ist garantiert 1 Byte sein, so Schleife zu 8.
  2. Maskieren Sie innerhalb jeder Iteration das Bit höchster Ordnung.
  3. Sobald Sie es haben, drucken Sie es einfach auf die Standardausgabe.

Hier ist ein kurzer Stich, die hoffentlich Sinn macht ...

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

    return 0; 
} 

CodePad.

Um das Bit zu bekommen, ich nach links verschieben Sie den nummerierten Bit zu erhalten (vom höchsten zum niedrigsten so Druck ist es leicht) und dann maskieren. Ich übersetze es dann zu 0 oder 1 mit !!.

+0

Das ist perfekt, genau das, was ich gesucht habe! Ich werde auf die Maskierung der Shift-Operatoren lesen, damit ich es vollständig verstehen kann. Wenn Sie die Zeit haben, können Sie jedoch erklären, was "Maske des Bits höchster Ordnung" bedeutet. Mit meinem derzeitigen Wissen bin ich nicht 100% sicher, was auf der Hauptleitung innerhalb der for-Schleife passiert. Danke! – user1783150

+0

@ user1783150 Das höherwertige Bit ist das siebte Bit, z. die '1' in' 1000000' (auch die Zahl '0x80' oder' 128'). – alex

+0

Ich bin immer noch ein bisschen neugierig wie das "!!" Betreiber arbeitet? Konvertiert es eine positive Zahl in eine "1" und behält 0 als "0"? Ein Google von "" !! " Betreiber C 'hat ehrlich gesagt keine Ergebnisse gemeldet. Ist es kein Standard-Operator? – user1783150

2

können Sie diese Methode verwenden

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

die binäre Darstellung zu erhalten und drucken damit

zum Beispiel

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

Versuchen Sie diese: -

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