我有一个源文本及其所谓的-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的内容。
答案 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;
}