0是循环冗余校验(CRC)的可能校验和吗?
我正在使用boost来计算CRC:
const unsigned int CrcPolynomial = 0x11021;
const unsigned short InitialValue = 0xffff;
boost::crc_optimal<16, CrcPolynomial, InitialValue, 0, true, true> Crc;
// process some bytes...
int x = Crc.checksum(); // <------ can this be 0?
答案 0 :(得分:3)
是。接收任何消息x
,并计算其CRC,crc(x)
。然后crc(x . crc(x))
将为0(其中.
表示连接)。
实际上,这种关系可用于验证消息+ CRC是否已正确传输(例如参见http://en.wikipedia.org/wiki/Computation_of_CRC处的第二个动画图表)。