当比特数不是8的倍数时,使用切片8算法计算CRC



我将使用slice by 8算法实现CRC24C计算。我已经成功地实现了数字数据位是8的倍数的情况。然而,当输入比特数不是8的倍数时,逐8切片算法失败。我计划将数据位分为两部分,一部分包含8的倍数的数据位#,另一部分包含剩余位。单独计算CRC24C并将其组合。然而,我无法找到将两个单独计算的CRC组合的方法。任何建议或想法都将非常有帮助。

您可以使用一个简单的函数来计算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定义生成这样的代码。


最新更新