2011-08-11 181 views
0

我发现这个类使标题状态。 但它总是抱怨段错误。 有人可以帮我调试吗? 问候在Qt中解压缩Gzip网络流

gzipDecompress(QByteArray &compressData) 
     { 

      //decompress GZIP data 
      //strip header and trailer 
       compressData.remove(0, 10); 
       compressData.chop(12); 

       const int buffersize = 16384; 
       quint8 buffer[buffersize]; 

       z_stream cmpr_stream; 
       cmpr_stream.next_in = (unsigned char *)compressData.data(); 
       cmpr_stream.avail_in = compressData.size(); 
       cmpr_stream.total_in = 0; 

       cmpr_stream.next_out = buffer; 
       cmpr_stream.avail_out = buffersize; 
       cmpr_stream.total_out = 0; 

       cmpr_stream.zalloc = Z_NULL; 
       cmpr_stream.zalloc = Z_NULL; 

       if(inflateInit2(&cmpr_stream, -8) != Z_OK) { 
         qDebug() << "cmpr_stream error!"; 
       } 

       QByteArray uncompressed; 

       do { 
        qDebug()<<"decompress................"<<uncompressed.size(); 
         int status = inflate(&cmpr_stream, Z_SYNC_FLUSH); 

         if(status == Z_OK || status == Z_STREAM_END) { 
           uncompressed.append(QByteArray::fromRawData(
            (char *)buffer, 
            buffersize - cmpr_stream.avail_out)); 
           cmpr_stream.next_out = buffer; 

           cmpr_stream.avail_out = buffersize; 
         } else { 
           inflateEnd(&cmpr_stream); 
           } 

         if(status == Z_STREAM_END) { 
          inflateEnd(&cmpr_stream); 
          break; 
         } 

       }while(cmpr_stream.avail_out == 0); 

       return uncompressed; 
     } 

回答

0

你试图使用qUncompress

+0

是的,并没有工作,有时它触发段错误。 – giuseppe

+0

qUncompress仅解压缩zlib数据,而不是gzip。格式大多相同,但是它们具有不同的标题。 – PAG