【问题标题】:c++ boost combine crc checksumc++ boost结合crc校验和
【发布时间】:2016-01-17 23:16:26
【问题描述】:

我有一个方向图,对于我计算的每个项目,a 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,但我想避免再添加一个依赖项。

【问题讨论】:

  • 看起来您可以在图中的每个节点上调用process_bytes()。如果您需要分支,那么您可以在访问下一个节点之前复制 crc 对象。
  • @moof2k 谢谢,这也是我考虑过的一个选项 - 但我放弃了它,因为它对于目标来说似乎有点太贵了 - 而且并行计算很难,因为它需要单个 crc 对象遍历所有项目。

标签: c++ boost crc


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-11
    • 2020-11-23
    • 2015-06-29
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2013-12-21
    • 2021-05-11
    • 2013-01-10
    相关资源
    最近更新 更多