2017-04-12 4 views
1

Ich möchte ein Lese-Bit von einer Binärdatei in ein Zeichen konvertieren, damit ich es zu einer Zeichenfolge hinzufügen kann, die ein Binärformat des Inhalts einer Datei darstellen würde. Meine Aufgabe ist es auch, eine Datei Byte für Byte zu lesen. Ich habe einen folgenden Code ein:Wie konvertiert man ein einzelnes Bit in char?

while(f.get(c)){ 
    for(int i=0;i<8;i++){ 
     cout << ((c>>i)&1);  //I would like to convert a single bit to a char here 
    } 
} 

Ich kann nicht herausfinden, wie es zu tun, da, wenn ich einfach ((c>>i)&1) bespannen füge ich eine binäre Form für jedes Bit erhalten lesen so 000000000 wird. Kann mir jemand helfen? Vielen Dank im Voraus.

Antwort

2

Ein einzelnes Bit b (ist, oder) in eine bool umgewandelt werden. In Ihrem Fall bool b = (c>>i)&1;

Sie möchten vielleicht b?'1':'0' mit der ternary conditional operator codieren.

Sie könnten auch Code "01"[(unsigned)b] (oder nur "01"[b]) oder (char)('0'+(unsigned)b) aber ich fühle es für den Menschen weniger lesbar ist (und beide nur funktionieren, weil (unsigned)b nur 0 oder 1 sein kann).

+0

Wird die Besetzung benötigt? '" 01 "[true]' bedeutet '* (" 01 "+ true)'. Die Überladungsauflösung ist eindeutig, da nur 'true' gefördert werden muss. – MSalters

+0

Es ist nicht notwendig, aber meiner Meinung nach viel lesbarer. –

2

Sie müssen bitset von #include <bitset>

while(f.get(c)) { 
    bitset<sizeof(c) * CHAR_BIT> currentByte(c); 
    cout << currentByte; 
} 
+1

'sizeof (char)' ist sinnlos, das ist ein _by definition_. – MSalters

+0

Ich habe es geändert, danke :) –

Verwandte Themen