web-dev-qa-db-ja.com

boost :: crcの使用方法

PHPのcrc32() 関数とまったく同じように機能するように、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である必要があります。その他のことは謎です。少しの援助? ;)

37
Thomas Bonini

Dan Storyと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();
}
60
Thomas Bonini

おそらくcrc_32_type crcテンプレートを使用する代わりに。テンプレートは一般的で、さまざまなパラメーターを使用して幅広いCRC設計に対応することを目的としていますが、CRC16、CCITT、XMODEM、CRC32をカバーする、一般的な使用法のための4つの組み込みの事前構成されたCRCタイプを出荷します。

10
Dan Story

ライブラリには、事前定義されたCRCエンジンが含まれています。あなたが欲しいのはcrc_32_typeだと思います。この例を参照してください: http://www.boost.org/doc/libs/1_37_0/libs/crc/crc_example.cpp

5
ergosys

定義済みのcrc_32_typeを使用してみましたか?

4
Marcelo Cantos

このページで、必要な特定の32ビットCRCを見つけ、他のすべてのパラメーターを読み取ります。 http://regregex.bbcmicro.net/crc-catalogue.htm

4
Ben Voigt