是否可以使用接受不同多项式的crc16实现?我的意思是通过不同的多项式可以计算crc16的相同函数,一次,多项式0xA001和另一个时间多项式0x1D0F(例如)。
我在C中使用modbus多项式(0xA001)可以很好地处理小端。我选择在0xFFFF初始化crc 16:
uint16_t _crc16_update(uint8_t *Trame, uint32_t NbOctets, uint16_t Polynome)
{
uint16_t u16CRC;
int_t i;
int_t j;
u16CRC = 0xFFFF;
for (i = NbOctets - 1; i >= 0; i--)
{
u16CRC = u16CRC ^ Trame[i];
for (j = 0; j < 8; ++j)
{
if (u16CRC & 1)
u16CRC = (u16CRC >> 1) ^ Polynome;
else
u16CRC = (u16CRC >> 1);
}
}
return u16CRC;
}
但是当我用其他多项式执行此代码时,如0x1D0F,结果是this crc 16 online calculator上的错误问题。
我想做一些不可能的事吗?
答案 0 :(得分:1)
是否可以使用接受不同多项式的crc16实现?
没有。 CRC生成器必须在算法的每一步使用相同的位,否则输出将不匹配。有关说明,请参阅https://en.wikipedia.org/wiki/Cyclic_redundancy_check。