CRC32计算不正确
CRC32 not calculated right
我使用一个非常简单的算法来计算CRC32,但它给出了错误的值。
我将我的输出值与计算器的输出值进行比较,但它看起来总是不同的
unsigned int crc32_tab[256] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
.........,..............,.............,.........,...........
};
使用查找表的函数是
unsigned int MyClass::crc32(unsigned int crc, const void *buf, unsigned int size)
{
const unsigned int *p;
p = (const quint8 *)buf;
crc = crc ^~ 0xFFFFFFFF;
while(size--)
{
crc = this->crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
}
return crc ^~ 0xFFFFFFFF;
}
我这样称呼它为
QString test= QString::number(mclass.crc32(0, crcval, 6))
从聊天讨论中提取的解决方案
正在实现的CRC-32算法是CRC-32以太网(生成器多项式0x04C11DB7
(。
此CRC-32需要:
- 正在使用
0xFFFFFFFF
进行初始化 - 并与CCD_ 3进行异或运算
因此,您应该删除函数中的crc ^~ 0xFFFFFFFF
语句,在对函数的调用中传递0xFFFFFFFF
,并且在对数据进行CRC校验后,您应该将返回值与0xFFFFFFFF
异或。
相关文章:
- 正弦级数方程计算不正确
- 计算幂级数的数学结果不正确
- 我的程序中的值计算不正确,即使支持数学是正确的
- 编译器在构造函数中计算的成员偏移量不正确
- 堆排序它不起作用或计算不正确
- 计算不正确
- C :不正确的文件大小计算Winapi
- 为什么此 stl 函数调用会导致不正确的布尔计算
- 平均计算不正确
- 斐波那契函数计算不正确
- 我正在尝试遍历 20x20 网格并计算产品,但总是得到不正确的结果。你能帮忙发现我的错误吗?
- 光线拾取方向计算不正确
- 计算后缀表达式.pop() 返回不正确的值来计算函数
- 为什么此代码不显示计算的正确答案,为什么它会无限循环?
- 为什么skb_transport_header计算不正确
- 计算delta不正确
- 使用cblas_dgemv()计算矩阵向量乘积的结果不正确
- 逻辑错误:平均质心计算不正确,无限执行,'entries '函数 - K 表示一组点的聚类,以C++为单位
- 字符/int相等计算不正确
- C 加加计算不正确