2015-05-02 8 views
0

Итак, в основном я строю кодировку Хаффмана. У меня уже есть карта для хранения письма и соответствующее представлениеСтрока в биты C++

Карта объявлена ​​как

map<char, string> 

Так это значит, у меня есть:

<'A', 101> 
<'S', 000011> 
<'G', 01> 
... 

Теперь мне нужно закодировать строку , например «ASSGSSA», поэтому я перехожу на карту и получаю значение для каждого ключа. После этого мне нужно ЗАПИСАТЬ последовательность 1 и 0 (например: 1010000011 ...) в двоичный файл, но я не знаю, как «переводить» каждую строку в представление бит/байт.

Не могли бы вы объяснить, как я могу сделать преобразование из строки в байты? и как обрабатывать, если последовательность не имеет размера 8.

+1

возможно дубликат [Невозможно записать строку 1 и 0 в двоичный файл, C++] (http://stackoverflow.com/questions/22591429/cant-write-string-of-1-and-0-to-binary-file-c) –

+4

Почему вы не храните целые числа вместо строк? –

ответ

0

Вместо того, чтобы отображать символ в строку, вы должны попытаться сопоставить символ с интегральным типом, например unsigned char.

static_assert(sizeof(unsigned char) == 1, "unsigned char is not 1 byte on this platform"); 
using byte = unsigned char; 

#include <map> 

using huffman_map_t = std::map<char, byte>; 
huffman_map_t theMap = {{'A', 0x05}, 
         {'S', 0x03}, 
         ... 
         {'G', 0x01}}; 

В компиляторах, внедривших двоичные целые литералы, вы могли бы приблизиться к представлению двоичного значения в коде. Я также выбрасывал разделители цифр, чтобы сделать шаблоны немного яснее. См Binary literals?, в частности, ответ на @ sasha.sochka

huffman_map_t theMap = {{'A', 0b00000101}, 
         {'S', 0b00000011}, 
         ... 
         {'G', 0b00000001}}; 
Смежные вопросы