Как использовать boost :: crc? - PullRequest
36 голосов
/ 04 апреля 2010

Я хочу использовать boost :: crc, чтобы он работал точно так же, как PHP-функция crc32 () . Я попытался прочитать ужасную документацию и много головных болей позже, я не достиг никакого прогресса.

Очевидно, я должен сделать что-то вроде:

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 .. То, что другие вещи, является загадкой. Небольшая помощь? ;)

Ответы [ 5 ]

56 голосов
/ 04 апреля 2010

Дэн Стори и ergosys дали хорошие ответы (по-видимому, я искал не в том месте, вот почему возникли головные боли), но пока я занимался этим, я хотел предоставить решение для копирования и вставки для функции в моем вопросе для будущих гуглеров:

int GetCrc32(const string& my_string) {
    boost::crc_32_type result;
    result.process_bytes(my_string.data(), my_string.length());
    return result.checksum();
}
9 голосов
/ 04 апреля 2010

Вы, вероятно, хотите использовать crc_32_type вместо использования шаблона crc. Этот шаблон является общим и предназначен для широкого спектра конструкций CRC с использованием широко варьируемых параметров, но он поставляет четыре встроенных предварительно сконфигурированных типа CRC для общего использования, включая CRC16, CCITT, XMODEM и CRC32.

5 голосов
/ 04 апреля 2010

Библиотека включает в себя предопределенные механизмы CRC. Я думаю, что вы хотите, это crc_32_type. Смотрите этот пример: http://www.boost.org/doc/libs/1_37_0/libs/crc/crc_example.cpp

4 голосов
/ 04 апреля 2010

На этой странице найдите конкретный 32-битный CRC, который вы хотите, прочитайте все остальные параметры: http://regregex.bbcmicro.net/crc-catalogue.htm

4 голосов
/ 04 апреля 2010

Вы пытались использовать предопределенный crc_32_type?

...