Qt quncompress de données gzip

Je tombe sur un problème, et ne pouvez pas trouver une solution.

Donc ce que je veux faire est de décompresser des données dans qt, à l'aide de qUncompress(QByteArray), envoyer www gzip format. J'ai utilisé wireshark afin de déterminer ce que cela est valable gzip flux, également testé avec zip/rar et les deux peuvent décompresser.

Code jusqu'à présent, c'est comme ceci:

    static const char dat[40] = {
         0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xaa, 0x2e, 0x2e, 0x49, 0x2c, 0x29,
         0x2d, 0xb6, 0x4a, 0x4b, 0xcc, 0x29, 0x4e, 0xad, 0x05, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00,
         0x2a, 0x63, 0x18, 0xc5, 0x0e, 0x00, 0x00, 0x00
    };
//this data contains string: {status:false}, in gzip format
QByteArray data;
           data.append( dat, sizeof(dat) );

unsigned int size = 14; //expected uncompresed size, reconstruct it BigEndianes

//prepand expected uncompressed size, last 4 byte in dat 0x0e = 14
QByteArray dataPlusSize;

dataPlusSize.append( (unsigned int)((size >> 24) & 0xFF));
dataPlusSize.append( (unsigned int)((size >> 16) & 0xFF));
dataPlusSize.append( (unsigned int)((size >> 8) & 0xFF));
dataPlusSize.append( (unsigned int)((size >> 0) & 0xFF));

QByteArray uncomp = qUncompress( dataPlusSize );
qDebug() << uncomp;

Et décompression échoue avec: qUncompress: Z_DATA_ERROR: Entrée de données est endommagé.

Autant que je sache, gzip composé de 10 octets d'en-tête, DÉGONFLER peyload, 12 octets de remorque ( 8 octets CRC32 + 4 octets ISIZE - uncompresed taille des données ).
L'entrelacement de l'en-tête et de la remorque doit me laisser avec DÉGONFLER flux de données, qUncompress rendements de la même erreur.

J'ai vérifié avec la chaîne de données compressées en PHP, comme ceci:

$stringData = gzcompress( "{status:false}", 1);

et qUncompress décompresser des données.(Je n'ai pas vu et gzip-tête mais c'est à dire ID1 = 0x1f, ID2 = 0x8b )
J'ai vérifié le code ci-dessus avec de débogage, et l'erreur se produit à:

        if (
        #endif
            ((BITS(8) << 8) + (hold >> 8)) % 31) { //here is error, WHY? long unsigned int hold = 35615
            strm->msg = (char *)"incorrect header check";
            state->mode = BAD;
            break;
        } 

gonfler.c ligne 610.

Je sais que qUncompress est tout simplement un wrapper de zlib, donc je suppose qu'il doit traiter gzip sans aucun problème. Tous les commentaires sont le bienvenue.

En ce qui concerne meilleur

Ce résultat ne qCompress("{status:false}") donner et le fait que les données puis de travailler avec qUncompress? Peut donner quelques conseils supplémentaires à ce qui se passe.
QByteArray uncomp = qUncompress( qCompress("{statut:false}") ); fonctionne très bien, PHP gzcompress(...) fonctionne très bien, gzip de WWW ne fonctionnent pas. Ce {statut:false} est gziped par WWW, je l'ai jetée à la matrice de wireshark, donc je suis positif, qui est valide gzip flux. Une seule erreur, c'est que qUncomress dit que c'est invalide. Tracé de débogage et d'erreur se produit au ((BITS(8) << 8) + (hold >> 8)) % 31) = vrai et ne devrait pas valides dans le flux.
J'ai écrit mes propres gzip fonctions pour travailler sur QByteArrays (à l'aide de la librairie zlib et GZipHelper.h)

OriginalL'auteur Talei | 2010-04-22