Qt: QVector <bool> to QByteArray

0

Привет, пожалуйста, помогите мне с конверсией. 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
    В чем проблема?
  • 0
    @Abhishek Bansal После обратной операции (декодирования) я получил не тот файл. Как я уверен, расшифровка верна. Проблема где-то в то время как ()
Показать ещё 2 комментария
Теги:
algorithm
qt
bitarray
bytearray

1 ответ

0

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

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

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

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

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

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

Удачи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню