データ32ビットCRC計算プログラム
次のようになります.
ファイルのCRC計算値はWinrarの結果と全く同じです.
ソースをダウンロード
テスト例:
ファイルの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;
}