用C ++计算CRC-8值的函数

时间:2017-08-31 22:37:23

标签: c++ crc

我正在尝试执行一个函数来计算CRC-8值,但是我得不到所需的结果。

该链是:123456789

结果应为:0xF4

我尝试过这个功能,但是我无法让它发挥作用:

unsigned char CRC8(const unsigned char *data, unsigned char len) 
{
    unsigned char crc = 0x00;

    while (len--) 
    {
        unsigned char extract = *data++;

        for (unsigned char tempI = 8; tempI; tempI--) 
        {
            unsigned char sum = (crc ^ extract) & 0x01;
            crc >>= 1;

            if (sum) 
            {
                crc ^= 0x8C;
            }

            extract >>= 1;
        }
    }

  return crc;
}

1 个答案:

答案 0 :(得分:1)

问题不在于您的代码,而在于您的代码是从网上复制的,而且与测试数据的参数完全匹配。

crc8(以及所有其他crcXX东西)严重超载。

您必须找到或编码适合测试数据参数的函数。

  • 多项式
  • 反映与否
  • crc start
  • 退出xor

这是一个catalogue,其中包括一些常见的CRC8。

可以适应不同参数的示例实现包括boostexample在codeproject(它的c#,但将其移动到c ++将像平凡的一样微不足道)。