Vba 短于多边形宽度的输入数据的CRC

Vba 短于多边形宽度的输入数据的CRC,vba,crc,Vba,Crc,在我学习用VBA在Excel中实现CRC的过程中,我正在写一篇论文。 我创建了一个相当简单的模块化算法,它使用Ross的。 它完美地适用于任何长度多项式和任何参数组合,只有一个除外;当输入数据的长度小于多项式的宽度和时,选择初始值(“INIT”),该初始值具有设置为“超过”输入数据长度的任何位 例如: Input Data: 0x4C Poly: 0x1021 Xorout: 0x0000 Refin: False Refout: False 如果我选择no INIT或任何类似0x###00的

在我学习用VBA在Excel中实现CRC的过程中,我正在写一篇论文。 我创建了一个相当简单的模块化算法,它使用Ross的。 它完美地适用于任何长度多项式和任何参数组合,只有一个除外;当输入数据的长度小于多项式的宽度时,选择初始值(“INIT”),该初始值具有设置为“超过”输入数据长度的任何位

例如:

Input Data: 0x4C
Poly: 0x1021
Xorout: 0x0000
Refin: False
Refout: False
如果我选择no INIT或任何类似0x###00的INIT,我将得到与任何在线CRC生成器相同的校验和。如果设置了最后两个十六进制字符的任何位(如0x0001),则我的结果无效

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

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

我不确定问题出在哪里。Ross链接中的示例代码初始化CRC,然后它一次更新一个字节的CRC(而不是一次更新一个字节)。在计算CRC之后,它被附加到输入数据中(有效地与
n
附加的0位进行异或运算),通常最高有效字节在前。您没有发布失败的代码,因此我无法确定问题出在哪里。因为我在Excel中执行VBA实现,所以我构建了自己的代码。正因为如此,我的算法一步一步地工作。根据我在sunshine2k网站上读到的内容判断,我假设您必须简单地将初始值异或到输入数据中,然后沿着原始路径(附加0位,用输入数据填充寄存器,然后计算CRC)。由于输入数据太短,我不确定将initialisor异或到哪里。现在,当我在初始值中XORing之前附加0位时,它可以按预期工作——有足够的材料可以进行XOR。