如何使用 boost::crc?

Posted

技术标签:

【中文标题】如何使用 boost::crc?【英文标题】:How to use boost::crc? 【发布时间】:2011-02-04 03:33:30 【问题描述】:

我想使用 boost::crc 以便它像php's crc32() 函数一样工作。我尝试阅读horrible documentation,后来很多头疼我没有取得任何进展。

显然我必须这样做:

int GetCrc32(const string& my_string) 
    return crc_32 = boost::crc<bits, TruncPoly, InitRem, FinalXor,
                   ReflectIn, ReflectRem>(my_string.c_str(), my_string.length());

bits 应该是 32.. 其他的东西是什么是个谜。一点帮助? ;)

【问题讨论】:

你也可以使用这个svn.abisource.com/wv/branches/release-version-0-7-12/crc32.c和svn.abisource.com/wv/branches/release-version-0-7-12/crc32.h。我认为算法是相同的,但速度比 boost crc 好得多。 【参考方案1】:

您可能想要使用crc_32_type 而不是使用 crc 模板。该模板是通用的,旨在适应使用各种参数的各种 CRC 设计,但它们提供了四种内置的预配置 CRC 类型以供常用,包括 CRC16、CCITT、XMODEM 和 CRC32。

【讨论】:

【参考方案2】:

该库包含预定义的 CRC 引擎。我认为您想要的是 crc_32_type。看这个例子:http://www.boost.org/doc/libs/1_37_0/libs/crc/crc_example.cpp

【讨论】:

【参考方案3】:

您是否尝试过使用预定义的crc_32_type

【讨论】:

【参考方案4】:

在此页面上,找到您想要的特定 32 位 CRC,读取所有其他参数: http://regregex.bbcmicro.net/crc-catalogue.htm

【讨论】:

【参考方案5】:

Dan Story 和 ergosys 提供了很好的答案(显然我找错地方了,这就是为什么令人头疼的原因)但是当我这样做时,我想为我的问题中的功能提供一个复制和粘贴解决方案,供未来的谷歌人使用:

uint32_t GetCrc32(const string& my_string) 
    boost::crc_32_type result;
    result.process_bytes(my_string.data(), my_string.length());
    return result.checksum();

【讨论】:

恕我直言,返回类型应该是无符号的(例如 std::uint32_t)。 @AndreasFlorath,我完全同意!感谢您指出了这一点。我更新了答案以使用它。

以上是关于如何使用 boost::crc?的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?