Desidero mantenere l'interoperabilità tra tutte le altre applicazioni sul pianeta (incluse le applicazioni Web) durante la compressione del testo. Dal momento che qCompress e qUncompress sembrano andare controcorrente, sto provando a usare zlib direttamente dalla mia applicazione Qt.Come comprimere zlib un QByteArray?
Accetterò la risposta più semplice (la maggior parte minima) che mi mostra come utilizzare la libreria zlib con un QByteArray direttamente O modificare l'uscita del qCompress in modo che possa essere utilizzato al di fuori di un'applicazione Qt.
Ecco il mio tentativo imbarazzante:
QByteArray tdata = QString("Oh noes!").toUtf8();
QByteArray cdata;
uLongf len = 12 + 1.002*tdata.length();
compress(&cdata, &len, &tdata, tdata.length());
E l'errore:
error: cannot convert 'QByteArray*' to 'Bytef*' for argument '1' to 'int compress(Bytef*, uLongf*, const Bytef*, uLong)'
Poi ho provato ad utilizzare QByteArray :: constData()
compress(cdata.constData(), &len, &tdata, tdata.length());
ma ho ottenuto il seguente errore:
error: invalid conversion from 'const char*' to 'Bytef*'
Non ho idea di cosa sia un Bytef quindi comincio a cercare nelle fonti zlib per indagare. Ma tutto quello che posso trovare per questo è in QtSources/src/3rdparty/zlib/zconf.h
# define Bytef z_Bytef
Così ora sto appena perso.
si potrebbe usare iostreams di Boost: ha un filtro di zlib – akappa