0

少し立ち往生していて、私自身の 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++ 開発者に。どんなアイデアでも本当に役に立ちます。よろしくお願いします。

4

1 に答える 1

2

Ross Williams の CRC に関する優れたチュートリアルを読んでください。また、 zlibのやや複雑な CRC 実装を見ることもできます。これは、一度に 4 バイトを計算します。一度に8 バイトずつ計算することもできます。

于 2013-07-31T07:40:18.593 に答える