zlib / RFC1950中的FCHECK如何工作?

时间:2017-02-28 00:44:15

标签: c zlib inflate

我试图为我自己的PNG库实现我自己的Inflater(我知道,不要重新发明轮子等等,等等)

我真的很难理解它应该如何工作,显然它应该是31的倍数(5位,所以总是31?),加上我们&# 39;应该从最不重要的位读到最重要的位,这是我之前看到的所有其他格式的倒退,这也引起了一些混淆。

我尝试阅读Zlib源代码,但它基本上是不可读的,并且RFC并不是关于"检查代码" (显然是zlib头的第二个字节的5个最低有效位,或者iDAT / fDAT卡盘数据部分的第二个字节)。

所以我的问题是;我该如何阅读,如何验证,我该怎么做?

编辑:检查代码在RFC 1950中也称为FCHECK

1 个答案:

答案 0 :(得分:1)

RFC 1950准确而简洁地说明如何验证标题。

  

当被视为一个时,FCHECK值必须是CMF和FLG   以MSB顺序(CMF * 256 + FLG)存储的16位无符号整数是a   31的倍数。

CMF是流的第一个字节,FLG是第二个字节。那我还能说什么呢?取第一个字节,乘以256,然后加上第二个字​​节。如果该数字不是31的倍数,则标题无效。

你不知道如何检查数字是否可被31整除?