Я реализую программу, которая использует кодировку Хаффмана для сжатия файла.У меня проблемы с записью битов сжатой строки в другой набор битов.У меня есть вектор байтов (8-значные целые числа) и вектор строк huffCodes, который имеет размер 256, в котором хранятся битовые строки для каждого индекса.(Например, 0 представлен 11, 1 представлен 11011 и т. Д.)
Вот мой текущий метод:
string compressed = "";
boost::dynamic_bitset<unsigned char> output;
for(byte b : bytes)
{
compressed += huffCodes [ ByteToInt(std::to_string(b)) ];
}
output = boost::dynamic_bitset<unsigned char> (compressed);
Это проходит через каждый байт и захватывает его соответствующийстрока битов из вектора huffCodes, затем добавляет эту строку к сжатой строке.Как только сжатая строка завершена, она преобразует ее в набор битов.Проблема этого метода заключается в том, что он очень медленно заполняет набор битов, потому что в моем векторе 72 миллиона байт.Мне не нравится этот метод, потому что, кажется, нет необходимости заполнять эту огромную строку, просто чтобы преобразовать ее в набор битов.Я бы предпочел что-то вроде этого:
boost::dynamic_bitset<unsigned char> output;
string temp = "";
for(byte b : bytes)
{
temp = huffCodes [ ByteToInt(std::to_string(b)) ];
output.append(temp);
}
Очевидно, что это не настоящий код, но в идеале я бы заполнил выходной битовый набор, пока собираю все строки из вектора huffCodes.Можно ли сделать это с помощью какого-либо объединения или добавления строк в набор битов?
Примечание: содержимое вектора huffCodes - это строки размером до 8, состоящие только из 1 и 0