Seasons.NET

ちょっとした技術ブログです

boost::crcを文字列で取得したい。

checksum()で受け取るデータを文字列で受け取りたかったので、
formatを用いて、取得するサンプルを書いてみた。

もっとうまい方法があれば、ご教授願います。

/* -------------------------------------------------------------------------------- */
/** 
 * @file:BoostTests.cpp
 *  
 * @brief:CRC文字列変換テスト
 * 
 * @author: Keisuke.Hata
 *  
 * @date:2008/04/30 15:21:18
 * 
 * @note
 *  
*/ 
/* -------------------------------------------------------------------------------- */
#include "stdafx.h"
#include <cstddef>
#include <algorithm>
#include <iostream>

#include <boost/crc.hpp>
#include <boost/foreach.hpp>
#include <boost/assign.hpp>
#include <boost/array.hpp>
#include <boost/format.hpp>

#include <windows.h>

#define foreach BOOST_FOREACH

using namespace std;

namespace std
{
    class stringutil
    {
    public:
        typedef std::vector<BYTE> bytes;

        static stringutil::bytes tobytes( std::string& str )
        {
           bytes _bytes;
           foreach( char c, str )
           {
               _bytes.push_back( (BYTE)c );
           }
           return _bytes;
        }

    };
}


int _tmain(int argc, _TCHAR* argv[])
{
    using namespace boost::assign;

    boost::crc_32_type ret;

    std::string hoge("Seasons");

    std::stringutil::bytes bytes;
    bytes = stringutil::tobytes( hoge );

    ret.process_bytes( &bytes.front() , bytes.size() );
    boost::format fmt;
    fmt = boost::format( "%1%" ) % ret.checksum();
    cout << fmt.str().data() << endl;

    return 0;
}