Je trébuche sur un problème et je ne trouve pas de solution.
Alors, ce que je veux faire, c'est de décompresser des données dans qt, en utilisant Quncompress (QbyTeArray), envoyer de www in gzip format. J'ai utilisé WireShark pour déterminer qu'il s'agit d'un flux GZIP valide, également testé avec Zip / Rar et les deux peuvent décompresser. P>
Code jusqu'à présent, est comme ceci: P>
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; }
3 Réponses :
Vous avez également oublié La raison pour laquelle En tant que ciscoIPPhone mentionné, vous devrez écrire la vôtre pour fonctionner pour traiter les données GZIP. P> dataplussize.append (données); code>. Cependant, cela ne résoudra pas votre problème. Le problème est que, tandis que GZIP et ZLIB ont le même format de données comprimé, leurs en-têtes et les remorques sont différents. Voir: http://www.zlib.net/zlib_faq.html#faq18 p>
Quncompress code> Utilise le zlib
décompressez code>, il ne peut donc que gérer le format ZLIB, pas le format GZIP. Il faudrait appeler les fonctions
gzxxxx code> pour gérer le format GZIP. p>
Quncompresser code> peut gérer la sortie de PHP 'CODE> GZCompress CODE> est que
gzcompress code> compresse la chaîne donnée à l'aide du format de données ZLIB. Voir: http://php.net/manual/fr/function.gzcompresser.php a> p>
Je n'ai pas oublié, c'est seulement une faute de frappe ici sur le forum et je l'ai appelle après un calcul de la taille de la taille. Cela ne signifie-t-il pas que lorsque j'entraînerais l'en-tête / la remorque ZLIB doit décompresser le flux de dégonfler? Parce que même lorsque vous me dirigez d'écrire ma propre chose, je devrai décompresser correctement les données de flux dégonfler avec zlib ou quncompress. D'AILLEURS. J'ai essayé de dépouiller des données et d'envoyer uniquement des flux de déflate, aussi une erreur. J'ai forcé Web à m'a donné une réponse avec une erreur de flux de déflèvement.
Également dans Inflated.c Il y a: Si ((((((((((((État-> wrap & 2) && Hold == 0x8b1f) {...} / * gzip en-tête * / pour mon dat [] C'est faux. Pourquoi est-ce que ça, j'ai eu ID1 & ID2 à 1,2?
J'ai fait ce que vous avez suggéré et il était plus facile que je pensais que ce serait. Merci.
directement à l'aide de zlib n'est pas si difficile.
Je le fais comme ceci: p> Le code est montély copié de la page exemple de code ZLIB.
Vous aurez besoin de inclure
Selon Documentation 15 + 32 est un "zlib et décodage gzip avec détection automatique d'en-tête" tandis que 15 + 16 est un mode pour décoder le format gzip uniquement
Voici ma contribution ... J'ai développé une classe ( qCompressor code>), basé sur
zlib code> pour compresser facilement / décompresser
qbytearray code> Utilisation de gzip.
qcompressor.h code>: p>
qcompressor.cpp code>: p>
#include <QDebug>
#include "qcompressor.h"
int main(int argc, char *argv[])
{
Q_UNUSED(argc);
Q_UNUSED(argv);
QString initialPlainText = "This is a test program for verifying that the QCompressor class works fine!";
qDebug() << "Initial plain text is: " << initialPlainText;
QByteArray compressed;
if(QCompressor::gzipCompress(initialPlainText.toLatin1(), compressed))
{
qDebug() << "Compressed text length is:" << compressed.length();
QByteArray decompressed;
if(QCompressor::gzipDecompress(compressed, decompressed))
{
qDebug() << "Decompressed text is: " << QString::fromLatin1(decompressed);
}
else
qDebug() << "Can't decompress";
}
else
qDebug() << "Can't compress";
}
Quelle sortie
qcompresser ("{statut: false}") code> donne et ces données fonctionnent alors avec quncompress? Peut donner quelques astuces supplémentaires quant à ce qui se passe.
Qbyearrararagneg = Quncompress (qcompress ("{statut: faux}")); Fonctionne bien, php gzcompress (...) fonctionne bien, gzip de www ne fonctionne pas. Ceci {Statut: False} est gzipède par www, je l'ai largué à la matrice de Wireshark, donc je suis positif qui est un flux GZIP valide. Seule une erreur est que QUNComress dit que cela n'est pas valide. Le débogage tracé et l'erreur se produisent à ((bits (8) << 8) + (Hold >> 8))% 31) = True et ne devrait pas pour le flux valide.
Je suis allé et j'ai écrit mes propres fonctions GZIP pour travailler sur qbyeArrays (en utilisant zlib et gziphelper.h)