"Convert" zlib 流到 gzip?



我有一个用zlib压缩的数据块,现在我需要解压缩它,但在Linux环境中手头只有gzip。不幸的是,不可能得到任何其他工具。有没有办法";转换";将zlib数据转换为gzip可以解压缩的数据?

我读到这篇:https://unix.stackexchange.com/questions/22834/how-to-uncompress-zlib-data-in-unix

这里基本上说添加一个10字节的头并将其传递到gzip中。然而,当我尝试这样做时,我没有得到任何输出。输出文件为空。

printf "x1fx8bx08x00x00x00x00x00x00x00" |cat - /tmp/data |gzip -dc >/tmp/out

/tmp/data包含一个以这两个字节开头的数据块:\x78\xDA(我将其解释为zlib标头(。

有什么建议吗?在准备gzip头之前,我也尝试过删除这2个字节。

编辑:经过更多的思考和阅读这里的评论后,我意识到输入数据实际上是不正确的。使用另一个测试数据源,我得到了更多。请参阅下文,由于我无法附加二进制数据,因此编码为base64。

我有源数据:

eJwNzbEvA1EcwPEcgsUs6UIisZ17v7tre2ehaR+Kq/TaU0XEvddTd9yrtq8NFiQ1GGwisWnSQQSJwWoSJgMWxGBCYvEPEB2/y+f7WIvWhf5629jWXE/ShJ/erNDVEEgMtwXIydZ9e2DxbtLQhda60LCrO6eEuuuSZSYGrelofBBBDEvxWZAVNRiRZMBofCYWtpLZEI5OGkomHc6O9GmEFpoeybEWkuOejGQQkSoiIG6ZmwXilHjvRIEui3FW5i6vcOLb/pQ5KgJCSAHQVOKvrWJLAklGEgRRmJRzLYTnXU1FQUVHKESqax4A6IrarDDNFYgHeqj50ESQKbP9BllinlEpc6fk24yRPHNwyV2x6RLjnmGl0tg0IokEzTPuYDM+EaFVp+TAABpAM8Pjtcc9u/PrYdHJFK+f37vfAocdmxf5s5uUmJ73Lz86F/z93233c+P1++mlOPR369GrVqzvnh8dH95qB/QfS/18rQ==

然后我去掉前两个字节,得到的结果是:

Dc2xLwNRHMDxHILFLOlCIrGde7+7a3tnoWkfiqv02lNFxL3XU3fcq7avDRYkNRhsIrFp0kEEicFqEiYDFsRgQmLxDxAdv8vn+1iL1oX+etvY1lxP0oSf3qzQ1RBIDLcFyMnWfXtg8W7S0IXWutCwqzunhLrrkmUmBq3paHwQQQxL8VmQFTUYkWTAaHwmFraS2RCOThpKJh3OjvRphBaaHsmxFpLjnoxkEJEqIiBumZsF4pR470SBLotxVuYur3Di2/6UOSoCQkgB0FTir61iSwJJRhIEUZiUcy2E511NRUFFRyhEqmseAOiK2qwwzRWIB3qo+dBEkCmz/QZZYp5RKXOn5NuMkTxzcMldsekS455hpdLYNCKJBM0z7mAzPhGhVafkwAAaQDPD47XHPbvz62HRyRSvn9+73wKHHZsX+bOblJie9y8/Ohf8/d9t93Pj9fvppTj0d+vRq1as754fHR/eagf0H0v9fK0=

将其(二进制,而不是base64,只是为了清楚起见(写入文件:/tmp/inputdata我运行以下shell命令:

printf "x1fx8bx08x00x00x00x00x00x00x00" |cat - /tmp/inputdata| gzip -dc >/tmp/out

这给了我这个:

gzip: corrupted data

/tmp/out的内容(同样,base64编码(:

0oRDoQEmoQRIf1sfUVIx8CBZAQ2kAWJERQQaYqh/zQYaYMdMTTkBA6EBpGF2gapiY2l4L1VSTjpVVkNJOjAxREUvSVoxMjM0NUEvMjFFMEpYRDdVUVk2RUNMTTNXVDdZRiM4YmNvYkRFYmRuAmJkdGoyMDIxLTA0LTAxYmlzdFJvYmVydCBLb2NoLUluc3RpdHV0Ym1hbU9SRy0xMDAwMzExODRibXBsRVUvMS8yMC8xNTA3YnNkAmJ0Z2k4NDA1MzkwMDZidnBqMTExOTM0OTAwN2Nkb2JqMTk2NC0wOC0xMmNuYW2kYmZuak11c3Rlcm1hbm5iZ25lRXJpa2FjZm50ak1VU1RFUk1BTk5jZ250ZUVSSUtBY3ZlcmUxLjAuMFhASoTSiWEI6NFgZVdxvtjgF9walgd6rmesxFMtVFxtseYIXm2N/YBp53na69PZcT/+xmpjtQNFOYWtmaCWxjiUYw==

你做对了。去掉前两个字节,并在这十个字节前面加上前缀。则CCD_ 2将抱怨";"文件意外结束";,但是它仍然会解压缩并将结果写入输出文件。

除非zlib流一开始就已损坏。

相关内容

  • 没有找到相关文章

最新更新