Unzip mit qUncompress()



  • Hallo,
    hat jemand Erfahrung mit der Funktion qUncompress(). Ich muss einen .zip data entpacken und dann base64 dekodieren. Ich weiss nicht ob die Funktion qUncompress() die Entpacken Aufgabe erledigen kann. Es steht niergendwo fest,ob die das erfüllt.

    //QString xml;
    	static const char data[17] = {0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00,
    		0x00, 0x00, 0x00, 0x00, 0x9d, 0x56, 0x5b, 0x6f, 0xe2, 0x3a, 0x10}; 
    
    	unsigned int size = sizeof(data); //expected uncompresed size, reconstruct it BigEndianes, last 4bytes
    	//0x0e, 0x00, 0x00, 0x00 = 0x0e = 148.
    
    	QByteArray dataPlusSize; //empty array, add uncompresed size at the begining
    	//BigEndian order
    
    	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));
    
    	dataPlusSize.append( data, sizeof(data) );
    
    	printf("%d\n",sizeof(data));
    
    	QByteArray input;
             input.append(data,sizeof(data));
    
    	QByteArray xmlByteArray = QByteArray::fromBase64(input);
    	QByteArray uncompArray = qUncompress(dataPlusSize);
    
    	if(!uncompArray.isEmpty())
    	{
    		// 1 Fall
    		QByteArray precode(QByteArray::fromBase64(uncompArray));
    	   // QString notetxt = precode.data();
    
    		// 2 Fall
    		QByteArray xmlByteArray = QByteArray::fromBase64(uncompArray);
    
    		//QString output = QString(xmlByteArray);
    
    	}
    

    Kann mir jemand helfen. Ich muss sozusagen QByteArray entpacken und base64 dekodieren.



  • Wo genau ist dein Problem? Ruf qUncompress auf und dann QByteArray::fromXml.



  • mein Problem ist das qUncompress() eine 0 zurückgibt.



  • soll ich auf die 4 Bytes freilassen am Beginn(laut Bemerkung)? Das gilt wie ich verstehe nur für die Daten, die mit zlib Algorithmus kompressiert wurden.



  • Das weiß ich nicht, aber kannst du nicht einfach mit nem zip programm ne datei bekannten Inhalts packen und die hier zum Test nehmen?



  • ich habe gerade direkt aus der Datei gelesen:

    QFile file("Test.txt");
    file.open(QIODevice::ReadOnly);
    QByteArray uncompArray = qUncompress(file.readAll());
    

    und uncompArray ist bei mir 0. Z_DATA_ERROR: Input data is corrupted



  • Wenn ich die Datei manuel selber als .zip umbennene und entpacke über 7-Zip-> Dateien entpacken. Kann ich den Inhalt problemlos in Notepad++ anschauen.



  • Dann versuch mal:

    QFile file("Test.txt");
    file.open(QIODevice::ReadOnly);
    QByteArray uncompressed = file.readAll();
    qUncompress(uncompressed);
    


  • uncompArray enthält die Daten aus dem Textfile.Nicht die entpackten!!!



  • QByteArray output;
    .....
    output = qUncompress(uncompArray);
    ...
    if(!output.isEmpty())<----------------ist 0
    


  • Häng dicht nicht an meiner Wortwahl auf. Hat es so funktioniert? Hinweis guck dir mal die Parameter von qUncompress an.



  • nein,die Funktion hat 0 geliefert.



  • liegt es vielleicht an dem Kompressionsalgorithmus. qUncompress() unterstützt vielleicht nicht entpacken mittel 7-Zip?



  • Kommt drauf an womit du mit 7zip packst. Den 7zip eigenen Algorithmus kann Qt nicht. Das kann alles was zLib kann.

    Und bei entpackt das mit meinem geposteten Code.



  • also es geht nicht aufgrund Kompressionsalgorithmen(7Zip)? Unterstützt QuaZIP meinen Kompressionsalgorithmus 7-Zip?



  • Hab ich doch schon geschrieben. Qt kann was zLib kann.



  • danke dir



  • Unterstützt QuaZIP das Kompressionsalgorithmus 7-Zip?



  • Keine Ahnung, ich kenne das nicht. Bleib am besten erstmal bei den Standardalgorithmen.


Log in to reply