2009-12-06 10 views
8

Ich implementiere den Huffman-Algorithmus in C. Ich habe die grundlegende Funktionalität bis zu dem Punkt, wo die binären Codewörter erhalten werden. so wird zum Beispiel abcd 100011000 oder etwas ähnliches sein. Jetzt ist die Frage, wie Sie diesen Code in der komprimierten Datei in Binärform schreiben. Ich meine, wenn ich es normal schreibe, wird jede 1 und 0 ein Zeichen sein, also gibt es keine Kompression.Ich schreibe Dateien in Bitform in eine Datei in C

Ich muss diese 1s und 0s in ihrer Bitform schreiben. ist das möglich in C. wenn ja wie?

+0

Nein, es ist nicht möglich. Und diese Frage ist ein Betrogener. –

+0

Nun, ich habe nur gefragt, wie man in dieser Situation vorgeht. Das Schreiben der Codes einfach als ASCII dient nicht dem Zweck. es muss einen anderen Weg geben. – sfactor

+0

sollten Sie ein int anstelle von char * in der Encoding-Funktion generieren, oder schreiben Sie eine Funktion, die die Zeichenfolge in ein int oder lang diese Bitfolge darstellt. –

Antwort

16

Collect Bits, bis Sie genug Bits ein Byte zu füllen und es dann schreiben ..

Z.B. etwas wie dieses:

int current_bit = 0; 
unsigned char bit_buffer; 

FILE *f; 

void WriteBit (int bit) 
{ 
    if (bit) 
    bit_buffer |= (1<<current_bit); 

    current_bit++; 
    if (current_bit == 8) 
    { 
    fwrite (&bit_buffer, 1, 1, f); 
    current_bit = 0; 
    bit_buffer = 0; 
    } 
} 

Sobald Sie fertig sind, Ihre Bits zu schreiben, müssen Sie den Bitpuffer spülen. Um dies zu tun, schreibe einfach Bits, bis current_bit gleich Null ist:

void Flush_Bits (void) 
{ 
    while (current_bit) 
    WriteBit (0); 
} 
+0

Danke für das Aufzeigen dieser ... so wie die Datei dann zu beenden? ... ich nehme an, wir müssen dies selbst in diesem Fall tun. – sfactor

+0

rufen Sie einfach Flush_Bits wie oben definiert auf. –

+0

Es gibt ein Problem im Code: Sie verschieben nur, wenn ein Bit gesetzt ist. Angenommen, Sie möchten "10000000" ausgeben. Die 1 wird nie die höchstwertige Bitposition erreichen, richtig? –

Verwandte Themen