データ32ビットCRC計算プログラム


次のようになります.
ファイルのCRC計算値はWinrarの結果と全く同じです.
 
ソースをダウンロード
 
#ifndef __CRC_H__
#define __CRC_H__

#include 

#define CRC32_TABLE_NUM			(256)
#define CRC32_MAGIC				(0x04c11db7L)
#define CRC32_INVALID_VALUE		(-1)

class CCRC
{
	public:
		CCRC();
		~CCRC();

		//      CRC
		DWORD GetBufCrc32(LPBYTE lpBuf, DWORD dwSize);

		//     CRC,         
		void  StartBlock();								//      
		BOOL  AppendBlock(LPBYTE lpBuf, DWORD dwSize);	//     
		DWORD GetBlockCrc32();							//     CRC

		//      CRC
		DWORD GetFileCrc32(LPCTSTR szFile);

	protected:
		void  InitCrc32();
		DWORD Reflect(DWORD dwRef, BYTE ch);

	private:
		DWORD m_dwCrc32Table[CRC32_TABLE_NUM];
		DWORD m_dwCrc32Block;

};




extern CCRC crc32;




#endif // !__CRC_H__

テスト例:
#include "StdAfx.h"
#include "Crc.h"
#include 
#include 

int main()
{
	char szBuf[] = "123";

	printf("%08X

", crc32.GetBufCrc32((LPBYTE)szBuf, strlen(szBuf))); crc32.StartBlock(); crc32.AppendBlock((LPBYTE)szBuf, 1); crc32.AppendBlock((LPBYTE)szBuf+1, 1); crc32.AppendBlock((LPBYTE)szBuf+2, 1); printf("%08X

", crc32.GetBlockCrc32()); printf("%08X

", crc32.GetFileCrc32("32.opt")); return 0; }