首页 > 解决方案 > 输入数据的 CRC 小于 poly 宽度

问题描述

在我研究使用 VBA 在 Excel 中实现 CRC 期间,我正在写一篇论文。我创建了一个使用罗斯参数化模型的相当简单的模块化算法。它可以完美地适用于任何长度的多项式和任何参数组合,除了一个;当输入数据的长度短于多项式的宽度并且选择了一个初始值(“INIT”),该值设置了任何“超过”输入数据长度的位。

例子:

Input Data: 0x4C
Poly: 0x1021
Xorout: 0x0000
Refin: False
Refout: False

如果我不选择任何 INIT 或任何像 0x##00 这样的 INIT,我会得到与任何在线 CRC 生成器相同的校验和。如果设置了最后两个十六进制字符的任何位 - 例如 0x0001 - 我的结果无效。

我相信问题归结为“如果两个字节的 INIT 参数只有一个字节的输入数据,那么寄存器如何初始化?”

标签: vbacrc

解决方案


事实证明我被误导了(或者我很可能误解了)关于如何使用 sunsung2k 网站上的 INIT 参数的解释。INIT 值不能与前n 个输入字节本身进行异或(n是寄存器的宽度/裁剪后的多边形/校验和),但只能在将n 个0 位附加到输入数据后进行异或。当输入数据等于或大于n字节时,此规范无关紧要,但当输入数据太短时,它却很重要。


推荐阅读