您好请帮我转换。 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的实现。 解密工作正常,所以问题在这里。
答案 0 :(得分:0)
我不能说出问题的确切原因是什么,但代码中存在可能导致问题的几个问题:
QVector <bool> x = table[currentArray.at(i++)];
currentArray.at()返回的char被隐式转换为QChar - 对于值&gt; 127这可能是一个问题,并查找错误的值,这取决于查找的创建方式。 =&GT;更好地使用QMap甚至QVector,256个条目使用char作为索引,速度要快得多。
table [...]将向地图插入一个新的空条目。我不认为这是打算 - 更好地使用table.value()。
另外我不记得但是我认为huffman存储位从0位开始然后填充到最高位,所以也许
buf = buf | x[n] << (7 - count);
应该反过来呢?
祝你好运。