Windev Compress():使用哪种压缩格式

时间:2014-02-06 10:16:15

标签: php compression windev

有谁知道,WinDev-Function Compress()使用哪种压缩方法,也许,如何在php中解压缩结果?

WinDev的API仅说“二进制”压缩,但没有关于它的进一步细节。 http://doc.windev.com/en-US/?3024012&product=WD&productversion=XXA150

在php中我可以使用unpack(),但必须说明哪种格式。如果没有知识,就会在大海捞针中搜寻。<​​/ p>

也许有人,已经做过这件事,并且可以帮助我。

示例: zip-File containing a sample-Result of the Compress()-Function and the plain content for comparison

2 个答案:

答案 0 :(得分:1)

PCSOFT在大多数情况下使用他们的WDZ格式并且它不是标准的,因此您无法使用常用工具打开它。我听说他们使用了一些像zlib这样的常用库,但是对它们进行了一些改动,所以你可能只能使用他们的工具WDZIP.EXE来处理它。

您应该查看zipCreate()等其他函数来创建存档并使用一些标准格式: http://doc.windev.com/en-US/?3082007

希望这会有所帮助:)

答案 1 :(得分:0)

这个问题已有 7 年历史,但如果有人需要读取使用该函数压缩的数据,我也不得不将其反转:

  • 它以 01 01 00 00 00 XX 开头,其中 XX 是:
    • 00 表示“无压缩”
    • 04 代表“LZW”
  • 然后是小端 int32 中压缩数据的长度。
    • 如果有压缩,则后跟未压缩缓冲区的长度(数据长度 + 4)。
  • 然后是缓冲区(已编码或未编码),其中包含:
    • 未压缩数据的长度,以 little endian int32 表示。
    • 实际数据。

LZW 压缩使用 16 位代码而不是通常的 12 位,并且它的明码为零,这意味着每个字面代码都递增。

我采用了 Go 的 compress/lzw 包并对其进行了一些修改:16 位代码、零清除代码、递减每个文字代码。 到目前为止,它可以正确解码所有内容。