Я пытаюсь реализовать алгоритм huffman для сжатия, который требует записи битов переменной длины в файл. Есть ли способ в C++ записывать данные переменной длины с 1-битной детализацией в файл?huffman encoding
ответ
Нет, наименьший объем данных, которые вы можете записать в файл, - один байт.
Чтобы облегчить манипулирование битами, вы можете использовать bitset, а затем использовать файл ofstream для записи в файл. Если вы не хотите использовать битовый набор, вы можете использовать bitwise operators для управления вашими данными перед сохранением.
Наименьшее количество бит, которое вы можете получить и сохранить, составляет 8 = 1 байт. Вы можете обращаться к битам в байтах с помощью битовых операторов^& |.
Вы можете установить n-й бит в 1 с помощью:
my_byte = my_byte | (1 << n);
где п 0 до 7.
Вы можете установить n-й бит в 0 с помощью:
my_byte = my_byte & ((~1) << n);
Вы можете переключить n-й бит, используя:
my_byte = my_byte^(1 << n);
Подробнее here.
Ответ klew, вероятно, тот, который вы хотите, но просто чтобы добавить что-то к тому, что сказал Билл, библиотеки Boost имеют dynamic_bitset, которые я нашел полезными в подобной ситуации.
Нет. Вам придется упаковать байты. Соответственно, вам понадобится заголовок в вашем файле, в котором указано, сколько элементов находится в вашем файле, потому что у вас скорее всего будут отсутствовать неиспользуемые биты.
Вся информация вам нужно на с битами здесь:
How do you set, clear, and toggle a single bit?
Но самый маленький объект, который вы можете поместить в файл является байт.
Я бы использовал dynamic_bitset, и каждый раз, когда размер стал больше 8, извлеките нижние 8 бит в символ и напишите это в файл, затем переместите оставшиеся биты на 8 мест (повторите).
- 1. C: Huffman Encoding
- 2. Matlab - сжатие JPEG. Huffman Encoding
- 3. python huffman encoding Exception Unorderable Types
- 4. Huffman Encoding, Сохранение кодов и запись двоичных файлов в C
- 5. Huffman vs adaptive huffman
- 6. Huffman Decompression
- 7. string encoding, mobile encoding
- 8. Encoding Set Encoding
- 9. Исключение в теме "main" java.lang.NoClassDefFoundError: Huffman (неправильное имя: p3/Huffman)
- 10. кодировка huffman для текстового файла
- 11. Huffman Coding Compression
- 12. Кодировка Huffman в C
- 13. Huffman Coding - Группировка символов
- 14. Процедура кодирования jpeg huffman
- 15. Как исправить дерево huffman
- 16. huffman без использования узла
- 17. Бедные мужчины Huffman Compression
- 18. Huffman Tree, неправильное кодирование
- 19. Huffman Tree in Haskell
- 20. Huffman Tree: Traversing
- 21. Ошибка кодирования Huffman
- 22. Huffman Tree Issue
- 23. Java Создание дерева Huffman
- 24. Huffman get tree height
- 25. Huffman node и NullPointerException
- 26. longest huffman codeword
- 27. Как работает сжатие huffman
- 28. Huffman Кодирование дерева
- 29. Декодирование дерева Huffman
- 30. Huffman, переполнение стека
Вам не нужно подсчитывать количество элементов файла, которое может быть присвоено специальному символу –