zlib 1.2.5无法识别此标头

时间:2013-01-20 04:01:29

标签: zlib

我有一个源文本及其所谓的-zlib在另一个文本文件中放置嵌入(和\转义)。我的编码没有文档,除了它使用zlib与名义转义为\ 0,\ t,\ n,\ r,引用等。

未转义的数据有:

前四个字节:1A 9B 02 00    最后四个字节:76 18 23 82

膨胀抱怨有一个无效的标题。

当我使用1.2.5自行缩小/扩充匹配的源文本时,我得到:

前四个字节:78 9C ED 7D

有人可以根据标头字节建议使用什么压缩?我还没有找到任何实际使用它们的魔术数字或标题公式。

编辑:Here是相关文件...

  • codedreadbase.cohdemo是源文本文件,其中包含BASE谓词后面的转义嵌入式部分。逃脱是:

    \ n =(换行符) \ r =(返回) \ 0 = 0(NULL) \ t =标签 \ q =“ \ s =' \ d = $ \ p =%

  • codedreadbase.deflated是我在双引号中将上述内容传递给zlib inflateInit / inflate * / inflateEnd的内容。

  • codedreadbase.txt是嵌入部分的原始文本。

1 个答案:

答案 0 :(得分:1)

前四个字节1A 9B 02 00是小端序列中未压缩数据的长度,十进制为170778。您确实找到了具有接下来的四个字节的有效zlib流的开头:78 5E ED 7D。您只需要从转义格式中正确提取二进制压缩流。我没有问题,并且完全解压缩了codedreadbase.txt。

你没有提到一个明显的逃避,这是反斜杠本身。 \\应该转到\。也许这就是你所缺少的。 C中这个简单的un-escaper工作:

#include <stdio.h>

int main(void)
{
    int ch;

    while ((ch = getchar()) != EOF) {
        if (ch == '\\') {
            ch = getchar();
            if (ch == EOF)
                break;
            ch =
                ch == 'n' ? '\n' :
                ch == 'r' ? '\r' :
                ch == '0' ? 0 :
                ch == 't' ? '\t' :
                ch == 'q' ? '"' :
                ch == 's' ? '\'' :
                ch == 'd' ? '$' :
                ch == 'p' ? '%' : ch;
        }
        putchar(ch);
    }
    return 0;
}