Ich versuche, den Huffman-Algorithmus für die Komprimierung zu implementieren, die das Schreiben von Bits variabler Länge in eine Datei erfordert. Gibt es eine Möglichkeit in C++, Daten variabler Länge mit 1-Bit-Granularität in eine Datei zu schreiben?huffman encoding
Antwort
Nein, die kleinste Datenmenge, die Sie in eine Datei schreiben können, ist ein Byte.
Sie können verwenden, um Bits einfacher zu bearbeiten, und dann ofstream verwenden, um in Datei zu schreiben. Wenn Sie kein Bitset verwenden möchten, können Sie die Daten vor dem Speichern mit bitwise operators bearbeiten.
Die kleinste Menge an Bits, auf die Sie zugreifen und speichern können, ist 8 = 1 Byte. Mit den Bitoperatoren^& | können Sie auf Bits in Byte zugreifen.
Sie n-te Bit auf 1 gesetzt verwenden kann:
my_byte = my_byte | (1 << n);
wobei n 0 bis 7
Sie n-te Bit auf 0 gesetzt verwenden kann:
my_byte = my_byte & ((~1) << n);
Sie können das n-te Bit umschalten mit:
Mehr Details here.
Die Antwort von klew ist wahrscheinlich die, die Sie wollen, aber um etwas hinzuzufügen, was Bill sagte, haben die Boost-Bibliotheken eine dynamic_bitset, die ich in einer ähnlichen Situation hilfreich fand.
Nein. Sie müssen Bytes packen. Dementsprechend benötigen Sie einen Header in Ihrer Datei, der angibt, wie viele Elemente sich in Ihrer Datei befinden, da Sie wahrscheinlich nicht verwendete nachgestellte Bits haben.
Alle Informationen, die Sie auf Bit twiddling brauchen:
How do you set, clear, and toggle a single bit?
Aber das kleinste Objekt, das Sie in einer Datei speichern, kann ein Byte.
Ich würde dynamic_bitset verwenden und jedes Mal, wenn die Größe größer als 8 wurde, extrahiere die unteren 8 Bits in ein Zeichen und schreibe dies in eine Datei, dann verschiebe die restlichen Bits um 8 Stellen (wiederhole).
- 1. Verwirrt über Huffman-Bäume
- 2. Huffman-Kodierung Algorithmus/Datenstrukturen
- 3. Huffman, Stack Überlauf
- 4. Herstellung Huffman effizienter
- 5. Huffman Codierung in Matlab (Binärwerte)
- 6. C++ Huffman-Baum und Zeiger
- 7. Encoding Apostroph
- 8. Encoding cp1252
- 9. Media Encoding
- 10. Unendliche Rekursion, StackOverError im Huffman-Baum
- 11. Dekomprimieren komprimierte String mit Huffman-Algorithmus
- 12. Länge der Binärcodierung im Huffman-Algorithmus?
- 13. Wie geht das bei der Huffman-Codierung?
- 14. Xml Escaping/Encoding Terminologie
- 15. knitr und UTF8 encoding
- 16. Python Text Encoding
- 17. Angular Ressourcen Encoding URL
- 18. Encoding Video nur FLV
- 19. Json Encoding HTML Zeichenfolge
- 20. Base64 Encoding Image
- 21. Human friendly binary encoding
- 22. Character Encoding Trouble - Java
- 23. Django reportlab latin2 encoding
- 24. html title encoding
- 25. Page Encoding in JSP
- 26. CakePHP Encoding HTML Entities
- 27. Sonderbare String.getByte (Encoding)
- 28. Bewerben Encoding Entire Data.Table
- 29. JavaFX String Encoding Probleme
- 30. Encoding json mit php
Sie müssen die Anzahl der Elemente der Datei nicht unbedingt zählen. Ein Sonderzeichen kann der Rechnung entsprechen –