我需要帮助来验证 CRC-16 值(也需要 CRC-32 值的帮助)。我试图坐下来了解 CRC 是如何工作的,但我画的是一个空白。
我的第一个问题是尝试使用在线计算器将消息“ BD001325E032091B94C412AC
”计算为CRC16 = 12AC 时。文档指出最后两个八位字节是 CRC16 值,所以我BD001325E032091B94C4
在网站http://www.lammertbies.nl/comm/info/crc-calculation.html中输入“”并接收 5A90 作为结果而不是 12AC .
有谁知道为什么这些值不同以及我在哪里可以找到如何计算 CRC16 和 CRC32 值的代码(我计划稍后学习如何做到这一点,但现在时间不允许)?
更多消息如下:
16000040FFFFFFFF00015FCB
3C00003144010405E57022C7
BA00001144010101B970F0ED
3900010101390401B3049FF1
09900C800000000000008CF3
8590000000000000000035F7
00900259025902590259EBC9
0200002B00080191014BF5A2
BB0000BEE0014401B970E51E
3D000322D0320A2510A263A0
2C0001440000D60000D65E54
- 编辑 -
我已经包含了更多信息。我引用的文档是 TIA-102.BAAA-A(来自 TIA 标准)。以下是文档中的说明(尽量避免侵犯版权):
数据包中的最后一个块包括几个八位字节的用户信息和/或填充八位字节,然后是一个 4 八位字节的 CRC 奇偶校验。这称为数据包 CRC。
数据包 CRC 是一个 4 字节的循环冗余校验码,对包含在中间块中的所有数据八位字节和最后一个块的用户信息八位字节进行编码。具体计算如下。
令 k 为要计算分组 CRC 的用户信息和填充比特的总数。将 k 个消息比特视为 k-1 次多项式 M(x) 的系数,将第零个消息八位字节的 MSB 与 x^k-1 相关联,将最后一个消息八位字节的 LSB 与 x^0 相关联。定义生成多项式 GM(x) 和反演多项式 IM(x)。
GM(x) = 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
IM(x) = x^31 + x^30 + x^29 + ... + x^2 + x +1
然后根据以下公式计算数据包 CRC 多项式 FM(x)。
FM(x) = ( x^32 M(x) mod GM(x) ) + IM(x) 模 2,即在 GF(2) 中
FM(x) 的系数被放置在 CRC 字段中,CRC 的第 0 个八位字节的 MSB 对应于 x^31,CRC 的第三个八位字节的 LSB 对应于 x^0。
在上面的引用中,我已经^
展示了权力,因为引用时格式并没有保持不变。我不确定会发生什么,但这有帮助吗?