- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在实现一个 png 阅读器,但我对数据的位顺序和一般格式感到困惑。
我无法访问 libpng、zlib 或类似软件。
请注意,我写的任何位串都是最高有效位在前。
根据 RFC1951 , "数据元素被打包 [...] 从最低有效位开始"
我的示例图像的第一个字节是:11101101
为了读取 header ,我颠倒了位顺序并得到:10110111
第一位是说这是最后一个区 block ,这是有道理的。接下来的 2 位是“01”,这是静态霍夫曼编码还是动态霍夫曼编码? RFC 只提到它们是位,但没有提到它们的顺序或它们的数值。
假设动态霍夫曼编码, header 后面是 2 个霍夫曼字母表。然而,这些也是编码的。 0-15作为字面量,16重复前面的代码(3+后面的2位)次。我假设 17 和 18 重复文字 0 是否正确?
进一步的问题是:
我想我不明白第 3.2.7 章的大部分内容...
最佳答案
除了霍夫曼代码外,不要反转位,只有在您的解码方法需要时才反转。 zlib 的膨胀从不反转这些位。 puff 保留位仅用于解码霍夫曼码。如果您尝试解释所有反转的位,您会感到困惑,并且您将不得不取消反转偏移位。
只需从底部读取位即可。
在您的示例中,11101101
,底部位是 1
,表示第一个 block 也是最后一个 block 。接下来的两位(未反转)10
表示这是一个动态 block 。
您可以使用 puff.c
, 在 contrib/puff
目录中 zlib分发,作为 RFC 1951 的补充。puff.c
被编写为简单明了的 inflate 实现,以提供 deflate 格式的明确定义。
关于deflate 格式,尤其是动态霍夫曼编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22499137/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我这样定义了一个二叉树: struct btree { int x; btree* left_child = nullptr; btree* right_child = nul
我有这个霍夫曼代码,旨在返回数组中每个字母的霍夫曼代码并按字母顺序打印它们。问题是它不生成任何输出,而是继续处理,直到我手动退出它。谁能帮我找出错误吗?我认为我的代码是正确的,但我不知道无限循环从何而
动机 想象一下一个哈夫曼压缩文件被部分下载,就像在p2p软件中一样,所以我们首先为整个文件分配磁盘空间,然后开始随机下载文件块。其中一个哈夫曼密码(但我们不知道是哪一个)是一个结束密码,所以如果这个密
以下 block 由霍夫曼 block 标记嵌套 -HUFF---------------------------------------------------------------------0
我是一名优秀的程序员,十分优秀!