2017-02-28 75 views
0

我试图实现我自己的Inflater为我自己的PNG库(我知道,不要重新发明轮毂等等等等),zlib/RFC1950中的FCHECK如何工作?

我真的很努力去理解它应该如何工作,显然它应该是31的倍数(5位,所以总是31?),再加上我们应该从最不重要的位读取到最重要的,这是从我以前看过的所有其他格式,这也引起了一些混乱。

我尝试阅读Zlib源代码,但它基本上是不可读的,而且RFC并不是所有关于“校验码”的明确信息(显然这是zlib头的第二个字节的5个最低有效位,或者iDAT/fDAT卡盘数据部分的第二个字节)。

所以我的问题是,我如何阅读它,如何验证它,我该怎么处理它?

编辑:校验码也被称为FCHECK在RFC 1950年

回答

1

RFC 1950说准确,简洁如何验证头。

的FCHECK值必须是使得CMF和FLG,存储在MSB顺序 16位无符号整数观察时(CMF * 256 + FLG),是 数倍31.

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

你不知道如何检查一个数是否可​​以被31整除?

+0

所以你通过31模全2字节块,而不仅仅是小5位的段落,你产生通过取2字节块的价值,并加入X的5位部分,使它的31多 我明白了,谢谢。 – MarcusJ