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/lzw
package и немного адаптировал его: 16-битные коды, нулевой чистый код, уменьшение каждого буквального кода. И он пока нормально все декодирует.