c ++ boost结合crc校验和

时间:2016-01-17 23:16:27

标签: c++ boost crc

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

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

crc = process_data(data);

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

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

1 个答案:

答案 0 :(得分:0)

如果您不想使用zlib,则只需复制zlib:crc32_combine_()gf2_matrix_square()gf2_matrix_times()中的代码。它大约有60行代码。

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

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