2010-04-04 24 views
34

Quiero usar boost :: crc para que funcione exactamente como la función PHP's crc32(). Intenté leer el horrible documentation y muchos dolores de cabeza después no he progresado.Cómo usar boost :: crc?

Al parecer tengo que hacer algo como:

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 debería ser 32 .. Lo que las otras cosas son es un misterio. ¿Un poco de ayuda? ;)

+0

también puede utilizar este http://svn.abisource.com/ wv/branches/release-version-0-7-12/crc32.c y http://svn.abisource.com/wv/branches/release-version-0-7-1 2/crc32.h. Supongo que el algoritmo es el mismo, pero la velocidad es mucho mejor que impulsar crc. – schoetbi

Respuesta

51

Dan Story y ergosys proporcionado buenas respuestas (al parecer yo estaba buscando en el lugar equivocado, por eso los dolores de cabeza), pero ya que estoy en lo que querían para proporcionar una solución de copia & pasta para la función en mi pregunta para los futuros empleados de 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

Probablemente desee utilizar el crc_32_type en lugar de utilizar la plantilla crc. La plantilla es general y está pensada para acomodar una amplia gama de diseños de CRC que utilizan parámetros muy variables, pero envían cuatro tipos de CRC preconfigurados incorporados para uso común, que cubren CRC16, CCITT, XMODEM y CRC32.

4

¿Ha intentado utilizar el crc_32_type predefinido?

Cuestiones relacionadas