boost::crc

トップページ > 数学 >

abstract

必要なヘッダ
<boost/crc.hpp>
出来ること
CRCの計算
リファレンス
en / jp

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <cstddef>
#include <algorithm>
#include <iostream>
#include <boost/crc.hpp>
using namespace std;

int main()
{
	const unsigned char data[] = {
		0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39
	};
	const size_t data_len = sizeof(data)/sizeof(data[0]);

	// CRC-CCITT
	// | 16bit、 生成多項式 0x1021、 初期値 0xFFFF
	// | 最後にXORするビット列 0、 出力/入力ビットオーダ MSB-First
	boost::crc_basic<16> crc1( 0x1021, 0xFFFF, 0, false, false );
	crc1.process_bytes( data, data_len );

	if( crc1.checksum() == 0x29B1 )
		cout << "OK" << endl;

	// CRC-CCITT 最適化バージョン
	boost::crc_optimal<16, 0x1021, 0xFFFF, 0, false, false> crc2;
	crc2 = for_each( data, data+data_len, crc2 );

	if( crc2() == 0x29B1 )
		cout << "OK" << endl;

	return 0;
}

etc

ネットワーク越しにデータを送るときなど、破損チェックのために CRC という値を計算して利用することがあります。 その値の計算ルーチンをまとめたのがこれ。CRC計算には、 パラメータやbit数に関して色々バリエーションがありますが、 その辺もちゃんと弄れるようになっているようです。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0