如何使用 zlib 计算 CRC32-C 校验和

Ant*_*ton 1 zlib crc

我使用 C zlib API 是因为它具有将crc32_combine校验和连接在一起的功能,而 Boost 则没有。

但是,我需要使用 polynomial 来实现 CRC32-C (Castagnoli) 校验和0x1EDC6F41,而不是标准的 CRC32 校验和。

使用 Boost 我显然可以使用:

#include <boost/crc.hpp>

using crc_32c_type = boost::crc_optimal<32, 0x1EDC6F41, 0xFFFFFFFF, 0xFFFFFFFF, true, true>;
crc_32c_type result;
result.process_bytes(reinterpret_cast<const char*>(&buffer), len);
return result.checksum();
Run Code Online (Sandbox Code Playgroud)

其中可以使用0x1EDC6F41多项式。

有没有类似的方法可以让我用 zlib 做到这一点?

Mar*_*ler 5

zlib 是开源的。您可以简单地获取源代码并根据自己的需要进行修改。您可以将行:更改odd[0] = 0xedb88320UL;为 Castagnoli 多项式的反射。