Calculate_CRC32函数。如何将其转换为计算字节而不是位

时间:2013-07-31 07:26:22

标签: c++ crc32

我正在帮助我的一位朋友,他有点卡住了我自己的c ++技能非常生疏。我很感兴趣和好奇心。所以我会尽力解释这个问题。注意它是32位检查。

uint32_t CRC32::calculate_CRC32(const uint32_t* plData, uint32_t lLength, uint32_t     previousCrc32)
 {
    uint32_t lCount;
    const uint32_t lPolynomial = 0x04C11DB7;
    uint32_t lCrc = previousCrc32;
    unsigned char* plCurrent = (unsigned char*) plData;
    lCrc ^= *plCurrent++;

    while (lLength-- != 0)
     {
       for (lCount = 0 ; lCount < lLength; lCount++)
       {
        if (lCrc & 1)
        lCrc = (lCrc >> 8) ^ lPolynomial;
           else
             lCrc = lCrc >> 8;
        }
    }

    return lCrc;
}

现在ILength是数据包包含的字节数。 plData是需要检查数据的数据包。实际上,该功能有效。但它有点工作。它需要改进以逐字节工作。所以那些远远超过我知识的天才c ++开发人员。任何想法都会非常有用。先谢谢你们。

1 个答案:

答案 0 :(得分:2)

读取Ross Williams excellent tutorial on CRCs,特别是关于“表驱动实现”的第9节,它一次计算一个字节的CRC,而不是一次计算一个位。您还可以查看更为复杂的CRC implementation in zlib,它一次计算四个字节。您也可以计算eight bytes at a time