Qt:QVector <bool>到QByteArray </bool>

时间:2013-11-21 06:40:09

标签: c++ algorithm qt bytearray bitarray

您好请帮我转换。 bool的QVector到字节数组。

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;
        }
    }

}

这是算法Huffman的实现。 解密工作正常,所以问题在这里。

1 个答案:

答案 0 :(得分:0)

我不能说出问题的确切原因是什么,但代码中存在可能导致问题的几个问题:

QVector <bool> x = table[currentArray.at(i++)];
  1. currentArray.at()返回的char被隐式转换为QChar - 对于值&gt; 127这可能是一个问题,并查找错误的值,这取决于查找的创建方式。 =&GT;更好地使用QMap甚至QVector,256个条目使用char作为索引,速度要快得多。

  2. 如果密钥不存在,
  3. table [...]将向地图插入一个新的空条目。我不认为这是打算 - 更好地使用table.value()。

  4. 另外我不记得但是我认为huffman存储位从0位开始然后填充到最高位,所以也许

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

    应该反过来呢?

    祝你好运。