如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]