deflateinit2 compress string/char mit zlib in gzip



  • Also ich habe in einer helper Datei eine bool Funktion, die ein char Zippen soll und wenn alles gut verläuft true ausgibt.

    Die Funktion wird mittels aufgerufen:

    int inlen = data.size();
    
    				int outlen;
    				char* out = new char[inlen];
    if (gzip_str(data.data(), inlen, out, &outlen)) {
                        cout << out << endl; 
    }
    

    Da man das Rad ja bekanntlich nicht neu erfinden soll/muss habe ich mich der Funktion von Matthias bedient und ich finde den Fehler selbst nicht, sodass ich euch um Rat frage! Vielleicht habe ich auch selbst ein Brett vorm Kopf! (P.S.: zlib.h ist natürlich includiert)

    bool gzip_str(const char* in, const int inlen, char* out, int *outlen) {
    	z_stream zlibStreamStruct;
    	zlibStreamStruct.zalloc = Z_NULL; // Set zalloc, zfree, and opaque to Z_NULL so
    	zlibStreamStruct.zfree = Z_NULL; // that when we call deflateInit2 they will be
    	zlibStreamStruct.opaque = Z_NULL; // updated to use default allocation functions.
    	zlibStreamStruct.total_out = 0; // Total number of output bytes produced so far
    	zlibStreamStruct.next_in = (Bytef*) in; // Pointer to input bytes
    	zlibStreamStruct.avail_in = inlen; // Number
    
    	int res = deflateInit2(&zlibStreamStruct, Z_BEST_COMPRESSION,
    			Z_DEFLATED, (15 + 16), 8, Z_DEFAULT_STRATEGY);
    	if (res != Z_OK)
            return false;
            do {
            zlibStreamStruct.next_out = (Bytef*) out + zlibStreamStruct.total_out;
    		zlibStreamStruct.avail_out = *outlen - zlibStreamStruct.total_out;
    		res = deflate(&zlibStreamStruct, Z_FINISH);
    	} while (res == Z_OK);
    
    	deflateEnd(&zlibStreamStruct);
    	*outlen = zlibStreamStruct.total_out;
    
    	return true;
    }
    

    Also wenn ich out ausgebe, bleibt dieser leer, aber die Funktion gibt ein true zurück. Also ich hoffe ihr könnt mir diesbezüglich helfen.
    Falls jemand Anregungen weiss, so wäre ich ihm sehr dankbar.

    Gruß



  • out ist ein Zeiger. Vielleicht willst du den Inhalt ausgeben...


Log in to reply