Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2018, 06:36
frkbvfnjh frkbvfnjh вне форума
Прохожий
 
Регистрация: 18.10.2011
Сообщения: 12
Репутация: 10
По умолчанию zlib 1950

Доброго времени суток! Просьба помочь разобраться с форматом файла zlib (rfc 1950). Пользуюсь библиотекой zlib скачанной вот от сюда https://www.base2ti.com/
Как я понял библиотека предназначена для работы с чистым deflate (rfc 1951) и gzip (rfc 1952), с этими форматами вроде разобрался, и сжимаю и распаковываю без проблем, но как с помощью нее распаковать zlib? Вроде и название библиотеки совпадает с названием формата, но как распаковать такой файл, не смог разобраться. Читал rfc 1950, но ни черта не понял, пытался перевести на русский, но перевод какой то корявый получается. Понял что есть заголовок, в котором, кроме прочей информации, определяется есть словарь или нет. После заголовка со словарем идут сами данные сжатые в deflate, затем идет контрольная сумма adler32. Но что такое словарь, как узнать его размер, или размер словаря всегда одинаковый? Так же понял что контрольная сумма, относится к словарю а не к самим данным, а если нет словаря? Короче ни фига не понял? Просьба по русски объяснить как устроен формат, или как распаковать такой файл с помощью библиотеки которую я скачал. Проект пишу на Delphi 10.2 Tokyo. Заранее спасибо!
Ответить с цитированием
  #2  
Старый 02.03.2018, 08:00
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от frkbvfnjh
...Просьба по русски объяснить как устроен формат...
А что толку-то - знание формата саму библиотеку не улучшит, но раз надо, то тогда шестибайтовый заголовок архива имеет следующую структуру: первый байт - это поле CMF, оно в свою очередь состоит из двух ячеек по 4 бита CINFO и СМ, следующий байт - флаговый, это поле FLG, делится неравномерно на три ячейки - начальные 2 бита - это ячея FLEVEL, следующий 1 бит отводится под FDICT и 5 оставшихся бит идут под FCHECK, заключительные 4 байта заголовка - это поле DICTID.
Разбор полей
Цитата:
Сообщение от habrahabr.ru/post/274825
CMF (Compression method and flags). Этот байт разделен на 2 ячейки по 4 бита в каждой: CM (Compression method), CINFO (Compression info).

CM (Compression method). Данное поле определяет метод сжатия, используемого в файле. CM = 8 обозначает, что используется Deflate с размером окна до 32 килобайт.

CINFO (Compression info). Когда CM = 8, CINFO — это логарифм с основанием 2, задающий значение размера окна минус 8 (CINFO = 7, задает размер окна, равный 32 килобайтам).

FLG (Flags). Этот байт разделен на части следующим образом: FCHECK, FDICT, FLEVEL.

FCHECK (check bits for CMF and FLG). Рассмотрим значение выражения sum = (CMF * 256 + FLG) как шестнадцатибитное целое число без знака. Данное поле дополняет FLG так, чтобы значение sum было кратно 31.

FDICT (Preset dictionary). Если данный флаг установлен, то описатель словаря DICT следует сразу за байтом FLG. Распаковщик может использовать значение данного поля для определения словаря, который использовался при сжатии.

FLEVEL (Compression level). Это поле используется особыми алгоритмами сжатия. Deflate (CM = 8): 0 — наиболее быстрое сжатие, 1- быстрое сжатие, 2 — сжатие по умолчанию, 3 — максимальное сжатие (наиболее медленно). Значение данного поля не учитывается при распаковке. Используется для того, чтобы указать, имеет ли смысл, дополнительное сжатие.

После DICT (если установлен FDICT) следует описатель словаря, в конце порции zlib идет контрольная сумма ADLER-32, высчитанная по несжатым данным по алгоритму Adler-32...
Прогнал данную библиотеку (zlib128, D7, W10x64) во всех доступных режимах и вариантах алгоритма сжатия\распаковки :-: на локальных архивах исключений не возникает
Ответить с цитированием
  #3  
Старый 06.03.2018, 05:54
frkbvfnjh frkbvfnjh вне форума
Прохожий
 
Регистрация: 18.10.2011
Сообщения: 12
Репутация: 10
По умолчанию

Спасибо! Кажись разобрался.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter