我打算用slice by 8算法来实现CRC24C计算。我已经成功地实现了当数据位数是8的倍数时的情况。但是,当输入位数不是8的倍数时,slice by 8算法失败。我计划将数据比特分成两部分,一部分包含8的倍数的数据比特,另一部分包含剩余比特。单独计算CRC24C并将其合并。然而,我不能想出一个方法来结合两个单独计算的CRC,任何建议或想法都会非常有帮助。
发布于 2018-07-12 00:46:07
您可以使用一个简单的函数来计算CRC的前几位和/或后几位,具体取决于数据在内存中的布局。我不知道您使用的是哪个24位CRC,但对于这个:
width=24 poly=0x864cfb init=0xb704ce refin=false refout=false xorout=0x000000 check=0x21cf02 residue=0x000000 name="CRC-24"这段C代码将用val的低位字节中的高位bits位更新crc
unsigned crc24_rem(unsigned crc, unsigned val, unsigned bits) {
val &= 0x100 - (0x100 >> bits) ;
crc ^= (unsigned)val << 16;
while (bits--)
crc = crc & 0x800000 ? (crc << 1) ^ 0x864cfb : crc << 1;
crc &= 0xffffff;
return crc;
}您可以使用crcany为任何CRC定义生成类似这样的代码。
https://stackoverflow.com/questions/51282678
复制相似问题