// boost crc校验
// made by davidsu33
//crc_16_byte crc_32_byte
#include "stdafx.h"
#include <boost/crc.hpp>
#include <boost/filesystem.hpp>
#include <boost/io/ios_state.hpp>
#include <iostream>
#include <string>
#include <fstream>
#include <cassert>
using namespace std;
void calcFileCrc32(const string& fileName)
{
typedef boost::crc_32_type Crc32Byte;
typedef Crc32Byte::value_type Crc32ByteResultType;
namespace newfs = boost::filesystem;
boost::uintmax_t filesize = newfs::file_size(fileName);
assert(filesize > 0);
//计算文件的CRC32校验值
ifstream ifs(fileName, ios_base::in | ios_base::binary);
//ifs.open(fileName, std::ios_base::binary| std::ios_base::in);
if(!ifs)
assert(false);
char *fileData = new char[filesize];
ifs.read(fileData, filesize);
ifs.close();
Crc32Byte crc32;
crc32.process_bytes(fileData, filesize);
typedef boost::io::ios_base_all_saver IosAllSaver;
IosAllSaver iosAllSaver(cout);
Crc32ByteResultType ret = crc32.checksum();
cout<<hex<<ret<<endl;
iosAllSaver.restore();
cout<<"10000"<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
string strFileName = "E:\\KuGou\\Stellar - T.I.E.mp3";
calcFileCrc32(strFileName);
getchar();
return 0;
}