png 块的 CRC32 计算与真实计算不匹配
CRC32 calculations for png chunk doesn't match the real one
我试图模仿用于在PNG文件中创建CRC的函数,我正在使用autodin II多项式和源代码:
http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/libkern/crc32.c
我的测试都是针对 IHDR 块的,所以我的参数是:
CRC - 0xffffffff 和 0(两者都被建议)
buff - IHDR 块类型的地址。
长度 - IHDR 区块的长度 + 4(区块数据的长度 + 类型的长度)
我以二进制打印了计算出的CRC,并将其与块的实际CRC进行了比较。我看不到任何相似之处(小大端序、反转位、XOR 等)。
以下是 IHDR 区块(十六进制格式)的数据:
长度(大端): D0 00 00 00 (13)
型号: 49 48 44 52
数据: 00 00 01 77 00 00 01 68 08 06 00 00 00
现有 CRC: b0 bb 40 ac
如果有人能告诉我为什么我的计算是错误的,或者给我一个可以工作的CRC32函数,我将不胜感激。谢谢!
PNG图像中使用的CRC-32算法如下所述:http://www.w3.org/TR/PNG-Structure.html#CRC-algorithm(还有一个指向用于进行测试计算的C代码的链接)。
但正如@Jigsore指出的那样,你不会从你在这里发布的数据中获得合理的结果。您给了我们一个 4 字节的类型标识符,以及看起来像 7.5 字节的数据。根据长度标头,总共应该有 13 个字节。
编辑:这使用 w3.org 中的函数:
int main() {
char input[] = { 0x49,0x48,0x44,0x52,0x00,0x00,0x01,0x77,0x00,
0x00,0x01,0x68,0x08,0x06,0x00,0x00,0x00 };
printf("%08lxn",crc(input,17));
return 0;
}
输出: ac40bbb0
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 激励'inline'说明符的真实世界示例?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- png 块的 CRC32 计算与真实计算不匹配
- 以C++本征计算的SSE值与真实值不同