2010-04-04 41 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