2010-04-04 19 views
34

Ich möchte boost :: crc verwenden, so dass es genauso funktioniert wie PHP's crc32() Funktion. Ich habe versucht, die horrible documentation lesen und viele Kopfschmerzen später habe ich keine Fortschritte gemacht.Wie benutzt man boost :: crc?

Anscheinend muss ich etwas tun:

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 sein sollte .. Was die anderen Dinge sind, ist ein Rätsel. Eine kleine Hilfe? ;)

+0

Sie können dies auch nutzen http://svn.abisource.com/ wv/files/release-version-0-7-12/crc32.c und http://svn.abisource.com/wv/branches/release-version-0-7-1 2/crc32.h. Ich nehme an, der Algorithmus ist der gleiche, aber die Geschwindigkeit ist viel besser als Boost CRC. – schoetbi

Antwort

51

Dan Geschichte und ergosys gute Antworten zur Verfügung gestellt (anscheinend war ich an der falschen Stelle suchen, das ist, warum die Kopfschmerzen), aber während ich dabei bin ich wollte eine Kopie & Paste Lösung für die Funktion in meiner Frage für zukünftige Googler bieten:

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

Sie möchten wahrscheinlich die crc_32_type anstelle der CRC-Vorlage verwenden. Die Vorlage ist allgemein gehalten und dazu gedacht, eine breite Palette von CRC-Designs unter Verwendung stark variierender Parameter aufzunehmen. Sie enthält jedoch vier integrierte vorkonfigurierte CRC-Typen für die allgemeine Verwendung, die CRC16, CCITT, XMODEM und CRC32 abdecken.

4

Haben Sie versucht, das vordefinierte crc_32_type zu verwenden?