Ich habe ein Problem mit der Codierung einer Textdatei mit Huffman. Lassen Sie uns sagen, dass die Linie zu codieren, wie die folgende ist:Huffman Encoding, Speichern von Codes und Schreiben von Binärdateien in C
AAAABBBCCAABBCCDFF
So ist die Frequenz Tabelle wie folgt aus:
A:6
B:5
C:4
D:1
F:2
So baue ich einen Baum, ist die Struktur wie folgt aus:
typedef struct node {
struct node *left;
struct node *right;
unsigned char character;
unsigned int flag; //needed for nodes with no value in Huffman-tree
unsigned int occurences;
} node;
weiß, dass ich die Codes sein sollte:
A: 10
B: 11
C: 01
D: 000
F: 001
Jetzt möchte ich diese Codes von meinem Baum bekommen, wie kann ich das leicht machen?
Zweitens möchte ich diese Codes speichern, damit ich die Codes leicht nachschlagen und sie in eine Binärdatei schreiben kann.
Wie kann ich diese Codes speichern und zum Schreiben, wie kann ich einzelne (oder 2 oder 3) Bits in eine Binärdatei schreiben, weil ich weiß, C will Bytes.
ich es so schreiben will (Codes für Byte und letzten Byte sortiert sind nur 7 Bits)
10101010 11111101 01101011 11010100 0001001 (only 7 bits)
[Ausführungs Huffman Coding in C] (http://www.programminglogic.com/implementing-huffman-coding-in-c/) –
Sie die Bits durch eine Funktion schieben kann, wo eine statische Byte ist gebaut. Wenn es 8 Bits hat, wird es in die Datei geschrieben. Entsprechend ruft die Funktion zum Zurücklesen 1 Bit aus einem Byte ab, wenn keins übrig ist, wird ein weiteres Byte aus der Datei gelesen. –
@ WeatherVane ist es möglich, ein Beispiel dafür zu zeigen? – fangio