我真的很想看看一个数字示例,手动压缩如何进行压缩。
以下非常短的文本“abc”已使用 deflate 算法进行压缩,输出“eJxLTEoGAAJNASc=”,其二进制表示法为:
01100101 01001010 01111000 01001100 01010100 01000101 01101111 01000111 01000001 01000001 01001010 01001110 01000001 0101 0011 01100011 00111101
任何人都可以帮忙展示位计数步骤如何手动工作,将这个 0 和 1 字符串解码为原始字符串“abc”吗?
谢谢你!
您的二进制转储是您提供的 Base64 字符串,而不是实际的二进制压缩数据。该数据以十六进制表示:
78 9c 4b 4c 4a 06 00 02 4d 01 27
或者用二进制表示:
01111000 10011100 01001011 01001100 01001010 00000110 00000000 00000010 01001101 00000001 00100111
您可以使用infgen https://github.com/madler/infgen分解放气流。您的数据实际上是围绕 deflate 流的 zlib 包装器:
! infgen 2.5 output
!
zlib
!
last ! 1
fixed ! 01
literal 'a ! 10010001
literal 'b ! 10010010
literal 'c ! 10010011
end ! 0000000
! 000000
!
adler
deflate 格式记录在RFC 1951 https://datatracker.ietf.org/doc/html/rfc1951,以及 zlib 包装器RFC 1950 https://datatracker.ietf.org/doc/html/rfc1950.
前两个字节是 zlib 标头。那么下一个字节的低位是011
,其中低1
说这是最后一个块,并且01
上面说这是一个固定块。请注意,这些位是从最低有效位到最高有效位(自下而上)读取的。 deflate数据中的五个字节的剩余位是符号a
, b
, and c
,以及块结束符号。接下来是未压缩数据的四字节 Adler-32 校验值。
这是一个非常无聊的例子,因为它很短。您将需要一个更长的示例来使用动态块,以便您可以充分探索动态块标题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)