微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

放气压缩 - 数值示例

如何解决放气压缩 - 数值示例

我真的很想看一个数字示例,看看手动压缩是如何工作的。

以下非常短的文本“abc”已使用 deflate 算法进行压缩,输出“eJxLTEoGAAJNASc=',二进制表示法是:

01100101 01001010 01111000 01001100 01010100 01000101 01101111 01000111 01000001 01000001 01001010 01001110 01000001 01010011 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 来反汇编 deflate 流。您的数据实际上是一个围绕 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 中,zlib 包装器记录在 RFC 1950 中。

前两个字节是 zlib 头。然后下一个字节的低位是 011,其中低位 1 表示这是最后一个块,上面的 01 表示这是一个固定块。请注意,这些位是从最低有效到最高有效(自下而上)读取的。 deflate 数据中五个字节的其余位是符号 abc,以及块结束符号。之后是未压缩数据的四字节 Adler-32 校验值。

这是一个很无聊的例子,因为它太短了。您需要一个更长的示例来使用动态块,以便您可以充分探索动态块头。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。