Главная » Статьи » C++ » Статьи по С++

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




Упаковка и распаковка GZIP в памяти
Упаковка и распаковка GZIP в памяти
 

Для выполнения операций упаковки/распаковки данных прямо в памяти, можно использовать бесплатную библиотеку zlib (формат получаемых данных совместим с gzip).

Ниже приведён исходный текст, демонстрирующий, как это можно сделать.

#include "stdafx.h"
#include "stdio.h"

Для выполнения операций упаковки/распаковки данных прямо в памяти, можно использовать бесплатную библиотеку zlib (формат получаемых данных совместим с gzip).

Ниже приведён исходный текст, демонстрирующий, как это можно сделать.

#include "stdafx.h"
#include "stdio.h"
// подключаем zlib в виде dll
#define zlib_dll 1
#include "gzip\helper.h"
#pragma comment(lib, "gzip\zlib.lib")
//////////////////////////////////////////////////////////////////////////
// функция для упаковки буфера
template
t *zlib_compress(t *buf, dword size, dword *result_size=null)
{
ca2gzipt<65536, z_best_compression, z_default_strategy> gzip((char *)buf, size);
if(result_size)
*result_size = gzip.length;
return (t*)gzip.pgzip;
}
// функция для распаковки буфера,
template
t *zlib_uncompress(t *buf, dword size, dword *result_size=null)
{
cgzip2a plain((byte*)buf, size);
if(result_size)
*result_size = plain.length;
return plain.psz;
}
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
// открываем тестовый файл, определяем его размер
file *f = fopen("test.txt", "r");
if(!f) return 1;
fseek(f, 0, seek_end);
dword size = ftell(f);
fseek(f, 0, seek_set);
// выделяем область памяти для текста из файла, читаем файл
char *text = new char[size ];
fread(text, size, 1, f);
fclose(f);
// упаковываем текст gzip-ом
dword comp_size;
char *compressed = zlib_compress(text, size, &comp_size);
// распаковываем
dword uncomp_size;
char *uncompressed = zlib_uncompress(compressed, comp_size, &uncomp_size);
// выводим результаты... Впечатляет
!
printf("source string: %d bytesn", size);
printf("packed string: %d bytesn", comp_size);
printf("unpacked string: %d bytesn", uncomp_size);
//
наслаждаемся результатом smile.gif...
while(1);
return 0;

Категория: Статьи по С++ | Добавил: c1 (2009 Июнь 16)
Просмотров: 978 | Теги: Упаковка и распаковка GZIP в памяти | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar