Как zlib сжать QByteArray?

Я хотел бы поддерживать взаимодействие между всеми другими приложениями на планете (включая веб-приложения) при сжатии текста. Поскольку qCompress и qUncompress, похоже, идут вразрез, я пытаюсь использовать zlib прямо из моего приложения Qt.

Я приму самый простой (самый минимальный) ответ, который показывает мне, как использовать библиотеку zlib с QByteArray напрямую ИЛИ изменить вывод qCompress, чтобы его можно было использовать вне приложения Qt.

Вот моя неудобная попытка:

QByteArray tdata = QString("Oh noes!").toUtf8();
QByteArray cdata;
uLongf len = 12 + 1.002*tdata.length();
compress(&cdata, &len, &tdata, tdata.length());

И ошибка:

ошибка: невозможно преобразовать 'QByteArray *' в 'Bytef *' для аргумента '1' в 'int compress (Bytef *, uLongf *, const Bytef * , uLong) '

Затем я попытался использовать QByteArray :: constData ()

compress(cdata.constData(), &len, &tdata, tdata.length());

Но получил следующую ошибку:

ошибка: недопустимое преобразование из' const char * 'в' Bytef * '

У меня нет идея, что такое Bytef, поэтому я начинаю искать в источниках zlib, чтобы исследовать. Но все, что я могу найти для этого, находится в QtSources / src / 3rdparty / zlib / zconf.h

# define Bytef                 z_Bytef

Так что теперь я просто потерялся.

6
задан 10 January 2012 в 21:40
поделиться