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

Function to calculate CRC-8 value in C ++

我正在尝试执行一个函数来计算 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;
}

问题不在于你的代码,而是你的代码是从网上复制的,根本不匹配你的测试数据的参数。

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

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

  • 多项式
  • 反映与否
  • crc 开始
  • 退出异或

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

可以适应不同参数的示例实现包括 boost or this example 在 codeproject(它的 c# 但将其移动到 c++ 将变得微不足道)。