我对 zlib 数据格式很好奇,并试图理解 RFC1950 中描述的 zlib 标头(https://tools.ietf.org/html/rfc1950 ) 中。然而,我对这种低级解释很陌生,似乎与我的一些结论相冲突。
我有以下压缩数据(来自 PDF 流对象):
b'h\xdebbd\x10`b`Rcb`\xb0ab`\xdc\x0b\xa4\x93\x98\x18\xfe>\x06\xb2\xed\x01\x02\x0c\x00!\xa4\x03\xc4'
Run Code Online (Sandbox Code Playgroud)
在python中,我已经成功解压并重新压缩了数据:
b'x\xdacbd\x10`b`Rcb`\xb0ab`\xdc\x0b\xa4\x93\x98\x18\xfe>\x06\xb2\xed\x01!\xa4\x03\xc4'
Run Code Online (Sandbox Code Playgroud)
正如我所了解的Deflate 和 inflate for PDF 中的讨论/答案,使用 zlib C++ 压缩数据的结果差异应该无关紧要,因为它是不同应用方法压缩数据的影响。
假设最后四个字节!\xa4\x03\xc4是 ADLER32(Adler-32 校验和),我的问题与前 2 个字节有关。
0 1 0 1 2 3 0 1 2 3
+---+---+ +---+---+---+---+ +=====================+ +---+---+---+---+
|CMF|FLG| | [DICTID] | |...compressed data...| | ADLER32 |
+---+---+ +---+---+---+---+ +=====================+ +---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
第一个字节代表 CMF,在我的两个实例中是
chr h = dec 104 = hex 68 = 01101000chr x = dec …