Estoy tratando de implementar el algoritmo Huffman para compresión, que requiere escribir bits de longitud variable en un archivo. ¿Hay alguna forma en C++ de escribir datos de longitud variable con granularidad de 1 bit en un archivo?codificación huffman
Respuesta
No, la cantidad más pequeña de datos que puede escribir en un archivo es de un byte.
Puede usar un bitset para facilitar la manipulación de los bits, luego use un ofstream para escribir en el archivo. Si no quiere usar el conjunto de bits, puede usar el bitwise operators para manipular sus datos antes de guardarlos.
La cantidad más pequeña de bits que puede acceder y guardar es 8 = 1 byte. Puede acceder a los bits en byte utilizando operadores de bits^& |.
Puede establecer el bit enésimo a 1 usando:
my_byte = my_byte | (1 << n);
donde n es de 0 a 7.
Puede establecer el bit enésimo a 0 usando:
my_byte = my_byte & ((~1) << n);
Puede alternar enésimo bit usando:
my_byte = my_byte^(1 << n);
Más detalles here.
la respuesta de klew es probablemente la que usted quiere, pero solo para agregar algo a lo que dijo Bill, las bibliotecas de Boost tienen un dynamic_bitset que encontré útil en una situación similar.
No. Deberá empacar los bytes. En consecuencia, necesitará un encabezado en su archivo que especifique cuántos elementos hay en su archivo, porque es probable que tenga bits finales que no se utilizan.
Toda la información que necesita el cambio de bit está aquí:
How do you set, clear, and toggle a single bit?
Pero el objeto más pequeño que se puede poner en un archivo es un byte.
Usaría dynamic_bitset y cada vez que el tamaño fuera mayor que 8, extraiga los 8 bits inferiores en una char y escriba esto en un archivo, luego cambie los bits restantes 8 lugares (repetir).
- 1. Confundido sobre Huffman árboles
- 2. C++ Huffman Tree and Pointers
- 3. ¿Cuáles son las aplicaciones del mundo real de la codificación huffman?
- 4. técnica de codificación Jpeg
- 5. Decodificación de un bloque JPEG Huffman (tabla)
- 6. ¿Cómo decodificar el código huffman rápidamente?
- 7. razones prácticas para Сhurch Codificación codificación
- 8. Diferencia entre codificación Url y codificación HTML
- 9. Codificación URL y codificación HTML NSStrings
- 10. codificación CP1252
- 11. XmlWriter codificación
- 12. Condición para código de bit único para un personaje en código Huffman?
- 13. ¿Cómo crear un árbol Huffman desde el encabezado FFC4 (DHT) en un archivo jpeg?
- 14. SOAP-ERROR: Codificación: ¿Violación de las reglas de codificación?
- 15. JSON de codificación/decodificación de codificación base64/decodificación en JavaScript
- 16. Codificación y codificación de código QR usando zxing
- 17. substr_replace codificación en PHP
- 18. Codificación porcentual javascript
- 19. apóstrofo de codificación
- 20. Python base 36 codificación
- 21. Estilo de codificación Java
- 22. ¿Existe una codificación pronunciable?
- 23. wchar_t y codificación
- 24. codificación base64 en MySQL
- 25. ¿Qué codificación es esta?
- 26. Codificación MP3 en Java
- 27. JavaScript ejemplos de codificación
- 28. rieles ActionMailer codificación
- 29. Diferencias de codificación cultural
- 30. Codificación de valor-clave
No es necesario tener que contar el número de elementos del archivo. Una eof de carácter especial puede ajustarse a la factura –