2010-04-04 30 views
34

我想使用boost :: crc,使其功能与PHP's crc32()函数完全相同。我尝试阅读horrible documentation,后来我还没有取得任何进展。如何使用boost :: crc?

显然,我需要做的是这样的:

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。什么其他的事情都是一个谜。一点帮助? ;)

+0

您也可以使用此http://svn.abisource.com/ wv/branches/release-version-0-7-12/crc32.c和http://svn.abisource.com/wv/branches/release-version-0-7-1 2/crc32.h。我假设算法是相同的,但速度比boost crc更好。 – schoetbi 2011-04-21 12:08:31

回答

51

丹的故事和ergosys提供很好的答案(显然我一直在寻找在错误的地方,这就是为什么头痛),但同时我在这我想提供的功能在我的问题对未来的Google副本&糊液:

int GetCrc32(const string& my_string) { 
    boost::crc_32_type result; 
    result.process_bytes(my_string.data(), my_string.length()); 
    return result.checksum(); 
} 
9

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

4

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