C ++ Boost 组合 CRC 校验和

c++ boost combine crc checksum

本文关键字:CRC 校验和 组合 Boost      更新时间:2023-10-16

我有一个方向图,对于我计算的每个项目,crc 表示它自己的数据 + 它也指向的项目的数据。

为了避免多次重新计算一个项目的数据,我想为项目使用已经计算的 crc。或者在伪代码中:

crc = process_data(data);
for (auto item : items)
    crc = combine_magic(crc, item.crc());

问题是combine_magic应该是什么。我使用加速 crc 库,但我在那里没有找到这样的功能。简单地使用 xor 是一个坏主意,因为我可能会完成一些指向偶数次的项目 - 这将将它们从等式中消除。Zlib 似乎 https://github.com/madler/zlib/blob/master/crc32.c 提供了这样的功能,但我想避免再添加一个依赖项。

如果你不想使用 zlib,那么只需从 zlib 复制代码:crc32_combine_()gf2_matrix_square()gf2_matrix_times() 。它大约有 60 行代码。

您的combine_magic()函数还需要用于计算 CRC 的项目中的字节数,以便将其与 crc 组合在一起。因此,请与CRC一起保存该长度。

顺便说一下,无论如何,boost都需要zlib。