CRC为PNG文件格式

问题描述 投票:1回答:3

我需要读取PNG文件和解释存储在它的所有信息,并在人类可读的格式打印出来。而在PNG工作,予理解的是,它使用CRC-32为每个块产生校验和。但我不明白的PNG文件规范网站中提到的以下信息:由PNG使用的多项式为:X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X + 1

这里是链接供参考:http://www.w3.org/TR/PNG/

任何人都可以请帮我理解这一点?

png crc32
3个回答
6
投票

这是在zlib的实施CRC-32算法。请不要实现自己时,你可以使用该库来代替。


[编辑]:如何使用从ZLIB的CRC计算器(在C的例子从zlib的文档中提取)。

#include <zlib.h>

uLong crc = crc32(0L, Z_NULL, 0);

while (read_buffer(buffer, length) != EOF) {
   crc = crc32(crc, buffer, length);
}
if (crc != original_crc) error();

如果你有,你想要得到的CRC的数据块,你并不需要,虽然循环;你刚才得到的初始值(第一次分配上面crc),然后计算了,你有数据(第二分配crc)的值。


4
投票

http://en.wikipedia.org/wiki/Computation_of_CRC

根据维基CRC的名单,这个多项式(又名AUTODIN II多项式)是最常用的一个。 CRC-32-IEEE 802.3的X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X + 1

用于(以太网,V.42,MPEG-2,PNG,POSIX校验和,ARJ,Lha32,RAR,ZIP,以及更多......)

Rewritted与^标功率:

 x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1.

所以,你可以阅读校验和,例如源这里

http://www.opensource.apple.com/source/file_cmds/file_cmds-188/cksum/crc32.c

32位AUTODIN-II的CRC于以下移位寄存器参考模型建造的。

多项式:G(X)= 1 + X + X ^ 4 + X ^ 5 + X ^ 7 + X ^ 8 + X ^ 10 + X ^ 11 + X ^ 12 + X ^ 1 + X ^ 22 + X ^ 23 + X ^ 26 + X ^ 32

输入数据位0第一

Leading-zero checking is performed by the following procedure:

 1. The crc register is initialized to 0xffffffff, not zero.

 2. When a crc is appended, the 32 bits of the crc are inverted.

 3. When checking a good message with an appended crc, the register
    will return to the fixed value of 0xdebb20e3, rather than zero.

0
投票

你看了关于结直肠癌维基百科的文章?没有统一格式的CRC,每一个“格式”是在这样一个多项式建成。

我不是很熟悉,无论是计算由手的CRC,但你看什么,其实这是在POSIX使用的格式。我敢肯定有它吨有用的实现的。

© www.soinside.com 2019 - 2024. All rights reserved.