首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当比特数不是8的倍数时使用切片8算法计算CRC

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

Stack Overflow用户
提问于 2018-07-11 18:05:06
回答 1查看 417关注 0票数 0

我打算用slice by 8算法来实现CRC24C计算。我已经成功地实现了当数据位数是8的倍数时的情况。但是,当输入位数不是8的倍数时,slice by 8算法失败。我计划将数据比特分成两部分,一部分包含8的倍数的数据比特,另一部分包含剩余比特。单独计算CRC24C并将其合并。然而,我不能想出一个方法来结合两个单独计算的CRC,任何建议或想法都会非常有帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 00:46:07

您可以使用一个简单的函数来计算CRC的前几位和/或后几位,具体取决于数据在内存中的布局。我不知道您使用的是哪个24位CRC,但对于这个:

代码语言:javascript
复制
width=24 poly=0x864cfb init=0xb704ce refin=false refout=false xorout=0x000000 check=0x21cf02 residue=0x000000 name="CRC-24"

这段C代码将用val的低位字节中的高位bits位更新crc

代码语言:javascript
复制
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定义生成类似这样的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51282678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档