Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
17 / 17 / 4
Регистрация: 03.12.2009
Сообщений: 103

ZIPование области памяти.

30.01.2012, 16:39. Показов 1326. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Как можно запаковать с помощью zip алгоритма область памяти (с файлами работа не ведется!),
т.е. область памяти ->Zip -> область памяти.
Вариант с запуском внешнего упаковщика с параметрами - не годится. Находил сторонние компоненты, но они все работают с файлами.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.01.2012, 16:39
Ответы с готовыми решениями:

Пересылка двух слов из области памяти M1 в область памяти М2
Нужно выполнить пересылку двух слов из области памяти M1 в область памяти М2. Описание области M1: место нахождения - основной сегмент...

Области памяти
Здравствуйте, я начинающий программист на c# и у меня очень часто возникает одна проблема, которую каждый раз решаю каким-то шаманством. ...

Очистка области памяти
Нужно очистить память созданную при помощи new. Сам специализируюсь больше на с++ - но в последнее время необходимо работать на Дельфи - в...

9
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
30.01.2012, 17:01
жму через lzma
Вложения
Тип файла: rar _7z.rar (1.17 Мб, 15 просмотров)
1
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
30.01.2012, 17:02
Вот нашёл вариант для gzip
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
30.01.2012, 17:03
Библиотека zlib
http://zlib.net/manual.html
compress2()
uncompress()
1
17 / 17 / 4
Регистрация: 03.12.2009
Сообщений: 103
30.01.2012, 18:53  [ТС]
Всем спасибо. Это подошло:
compress2()
uncompress()

Добавлено через 25 минут
Цитата Сообщение от odip Посмотреть сообщение
Библиотека zlib
http://zlib.net/manual.html
compress2()
uncompress()
В цикле запаковываю массивы байтов. на одном из шагов compress2 возвращает код Z_BUF_ERROR.
Z_BUF_ERROR - if there was not enough room in the output buffer. Кто подскажет как это понимать? Под выходной массив выделяю столько же места, сколько и у оригинального массива до упаковки.

Добавлено через 15 минут
Нашел FAQ

compress() returns Z_BUF_ERROR.
Make sure that before the call of compress(), the length of the compressed buffer is equal to the available size of the compressed buffer and not zero.

Оказывается, второй параметр (размер запакованных данных) надо предварительно заполнять размером выделенной памятии под буфер для запакованных данных).
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
31.01.2012, 08:47
Оказывается, второй параметр (размер запакованных данных) надо предварительно заполнять размером выделенной памятии под буфер для запакованных данных).
Это да - все на эти грабли наступают

Добавлено через 1 минуту
Upon entry, destLen is the total size of the destination buffer, which must be at least the value returned by compressBound(sourceLen)
Есть функция оценки выходного размера

Если сильно надо то можно не целиком сжимать область памяти
а использовать потоковое сжатие
0
17 / 17 / 4
Регистрация: 03.12.2009
Сообщений: 103
31.01.2012, 18:23  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
Если сильно надо то можно не целиком сжимать область памяти
а использовать потоковое сжатие
Этот вариант будет полезным для упаковки данных огромного размера. Пока нет нужды

Добавлено через 6 часов 59 минут
А кто знает как узнать размер буфера, необходимого для распаковки?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
02.02.2012, 00:26
я записываю признак сжатия и размер перед сжатыми данными. если после сжатия получаю размер больше чем до (переполнение буфера) в признак сжатия пишу "нет".
0
17 / 17 / 4
Регистрация: 03.12.2009
Сообщений: 103
25.02.2012, 12:06  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
я записываю признак сжатия и размер перед сжатыми данными. если после сжатия получаю размер больше чем до (переполнение буфера) в признак сжатия пишу "нет".
Мне неоткуда прочесть размер оригинальных данных.. На сервер приходит зипованный массив байтов. Может в zlib есть какая-то функция полезная ?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
26.02.2012, 00:40
я так понял что на той стороне вы тоже жмете. если это так - просто передавайте этот размер. если нет - то я не понял темы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2012, 00:40
Помогаю со студенческими работами здесь

Обращение к области памяти
Здравствуйте! Имеется 3 области памяти, в каждой расположен массив. Код1(работает): ; тут все работает отлично, т.к. 3й массив...

Размер области памяти
Добрый вечер. Подскажите, пожалуйста, почему при выполнении данной программы объем памяти по каждой строке равен 4? Ведь по идее...

Адрес области памяти
Что такое адрес области памяти? Чем он отличается от адреса переменной? - Дайте, пожалуйста, определение. Искал в интернете и нашел только...

Создание объекта в области памяти
Здорова! Тут вообщем не получается создать в одной и той же области памяти повторно объекты От есть код: //fynkci9 clone() #include...

Области памяти в Siemens S7 PLC
Чем отличается "Вход образа процесса" от "Периферия: внешний вход" т.е. I IB IW ID от PIB ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru