Russian Qt Forum
Ноябрь 25, 2024, 01:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: qt и zlib  (Прочитано 10964 раз)
alik
Гость
« Ответ #15 : Февраль 18, 2016, 16:52 »

Ребята, а как вызвать правильно функцию -

ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
                                   const Bytef *source, uLong sourceLen));

из встроенной библиотеки #include <QtZlib/zlib.h>   ?

У меня есть буферы QByteArray, как мне перейти к ByteF ?

Можно писать что то типа ?
QByteArray Dest, Src;
uncompress(ByteF (Dest), CompressedDataLen, ByteF (Src), RawDataLen);

Записан
alik
Гость
« Ответ #16 : Февраль 18, 2016, 20:24 »

Все победил проблему, очень просто:

#include <QtZlib/zlib.h>

            unsigned char *compressBuf = new unsigned char[CompressedDataLen];
            memcpy(compressBuf, buffer, CompressedDataLen);
            unsigned char *uncompressBuf = new unsigned char[RawDataLen];
            unsigned long int compressBufLength = CompressedDataLen;
            unsigned long int uncompressLength = RawDataLen;
            int uncompressValue = uncompress(uncompressBuf, &uncompressLength, compressBuf, compressBufLength);

Результирующий буфер лежит в uncompressBuf !
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #17 : Февраль 18, 2016, 21:27 »

Цитировать
Note: If you want to use this function to uncompress external data that was compressed using zlib, you first need to prepend a four byte header to the byte array containing the data. The header must contain the expected length (in bytes) of the uncompressed data, expressed as an unsigned, big-endian, 32-bit integer.
Код:
    QFile file("./zlib_file.dat");
    if(!file.open(QIODevice::ReadOnly)){
        return;
    }
    QByteArray data = file.readAll();
    QByteArray head(4,0);
    head[3] = 255;
    data.insert(0,head);
    QByteArray deflate =  qUncompress(data);
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 23.