我正在研究一个在其他人之间验证传入消息有效性的工作程序。使用的 CRC 是 CCITT 16,CRC 的初始值设置为 0xFFFF,并且消息以字节的形式发送,首先接收到的字节是 LSb 在前,字节在 MSB 在前。该消息形成一个长达 1024 位的长比特流,包括末尾的 16 个 CRC 位。
我完全理解CRC值的计算。令我感到困惑的是,我找不到任何证明它的参考资料,是在收到所有消息后执行的有效性检查。即,根据 0xF0B8 而不是 0x0000 检查 CRC 值。我错过了什么吗?
// crcValue is the 16 bit CRC variable under construction
// dataBit is a byte containing one bit of the data bitstream at LSb
...
// CRC calculation bit by bit
if(dataBit ^ (crcValue & 0x0001)) crcValue = (crcValue >> 1) ^ 0x8408;
else crcValue >>=1;
//After running over all the bitstream the crcValue is checked
if(crcValue != 0xF0B8) ... // reject data
else ... // accept data
该程序有效。如前所述,我无法理解 0xF0B8 值的来源。
先感谢您