2013-11-21 2 views
0

안녕하세요. 제발 도와주세요. bool의 QVector를 바이트 배열에 반환합니다.Qt : QVector <bool> to QByteArray

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 역 동작 (디코딩) 후에 잘못된 파일이 있습니다. 디코딩이 정확하다고 확신합니다. 어딘가에있는 문제() – punksta

+2

애플리케이션을 디버그하는 것은 어떨까요? –

답변

0

말할 수 없다 :

QVector <bool> x = table[currentArray.at(i++)]; 
  1. currentArray.at (에 의해 반환 된 문자를)가 암시 적으로 QChar로 변환됩니다. - 값이> 127 인 경우 문제가 될 수 있으며 잘못된 값을 조회합니다. 이는 조회가 작성된 방법에 따라 다릅니다. => QMap을 사용하거나 QVector를 사용하여 훨씬 빠른 char 인덱스를 갖는 256 개의 엔트리를 생성합니다.

  2. 테이블 [...] 키에 대해 아무 것도없는 경우 새 [빈 항목]을지도에 삽입합니다. 나는 이것이 여기에 있다고 생각하지 않는다. - table.value()를 더 잘 사용하라.

또한 기억하지 않는다 그러나 나는

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

라운드 다른 방법으로해야한다 어쩌면, 비트 0에서 시작하고 최상위 비트까지 작성 허프만 저장 비트 생각?

행운을 빈다.