Windev Compress(): какой формат сжатия используется

Кто-нибудь знает, какой метод сжатия использует WinDev-функция Compress() и, возможно, как распаковать результат в php?

API-интерфейс WinDev говорит только о "бинарном" сжатии, но не содержит подробностей об этом. http://doc.windev.com/en-US/?3024012&product=WD&productversion=XXA150

В php я могу использовать unpack(), но должен сказать, какой формат. Без знания ноги это поиск иголки в стоге сена.

Может быть, есть кто-то, кто уже сделал это и мог бы помочь мне.

Образец: zip-файл, содержащий образец-Результат Compress()- Функция и простой контент для сравнения

2 ответа

Решение

PCSOFT использует их формат WDZ почти для всего, и он не является стандартным, поэтому вы не сможете открыть его обычными инструментами. Я слышал, что они использовали некоторые из обычных библиотек, таких как zlib, но добавили к ним свой небольшой поворот, чтобы вы могли работать только с их инструментом WDZIP.EXE, чтобы работать с этим.

Вы должны посмотреть на другие функции, такие как zipCreate() для создания архивов и использования некоторых стандартных форматов: http://doc.windev.com/en-US/?3082007

Надеюсь это поможет:)

Этому вопросу 7 лет, но в случае, если кому-то нужно прочитать данные, сжатые с помощью этой функции, мне тоже пришлось отменить его:

  • Это начинается с 01 01 00 00 00 XX где XX является:
    • 00 для "без сжатия"
    • 04 для "LZW"
  • Затем есть длина сжатых данных с прямым порядком байтов int32.
    • Если есть сжатие, за ним следует длина несжатого буфера (длина данных + 4).
  • Затем есть буфер (закодированный или нет), который содержит:
    • Длина несжатых данных с прямым порядком байтов int32.
    • Фактические данные.

Сжатие LZW использует 16-битные коды вместо обычных 12-битных, а его чистый код равен нулю, что означает, что каждый буквальный код увеличивается.

Я взял го compress/lzwpackage и немного адаптировал его: 16-битные коды, нулевой чистый код, уменьшение каждого буквального кода. И он пока нормально все декодирует.

Другие вопросы по тегам