Qt: QVector & lt; bool & gt; в QByteArray

Здравствуйте, пожалуйста, помогите мне с преобразованием. QVector от bool до массива байтов.

QByteArray currentArray
//get(currentArray); currentArray is just text.
QMap <QChar, QVector<bool> > table;
//creating table;
//table: is set of QChar and bit code
//0: 100110111001
//1: 00011
//2: 011110
//3: 010001
//...
QByteArray compressedArray;
//converting QVector<bool> from QMap to QByteArray
//it do not work fine.
int count=0;
Сhar buf=0;
i=0;

while(i<currentArray.size())
{
QVector <bool> x = table[currentArray.at(i++)];
for(int n=0; n < x.size(); n++)
{
buf = buf | x[n] << (7 - count);
count ++;
if (count == 8)
{
count=0;
compressedArray += buf;
buf = 0;
}
}

}

Это реализация алгоритма Хаффмана.
Расшифровка работает правильно, поэтому проблема здесь.

0

Решение

Я не могу сказать, какова точная причина вашей проблемы, но в вашем коде есть несколько проблем, которые мог вызвать проблемы:

QVector <bool> x = table[currentArray.at(i++)];
  1. символ, возвращаемый currentArray.at (), неявно преобразуется в QChar — для значений> 127 это может быть проблемой и поиск неправильного значения, это зависит от того, как был создан поиск. => лучше использовать QMap или даже QVector с 256 записями, имеющими char в качестве индекса, что намного быстрее.

  2. Таблица […] вставит новую пустую запись на карту, если для ключа не существует никого. Я не думаю, что это предназначено здесь — лучше используйте table.value ().

Также я не помню, но я думаю, что huffman хранит биты, начиная с 0, а затем заполняется до самых значимых бит, так что, возможно,

 buf = buf | x[n] << (7 - count);

должно быть наоборот?

Удачи.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]