CRC计算代码

/* ********************************************************************** */
/*  Calculate CRC value of file                                           */
/* ********************************************************************** */
unsigned 
long  Crc32Table[ 256 =  {
    
0x00000000L 0x77073096L 0xee0e612cL 0x990951baL 0x076dc419L ,
        
0x706af48fL 0xe963a535L 0x9e6495a3L 0x0edb8832L 0x79dcb8a4L ,
        
0xe0d5e91eL 0x97d2d988L 0x09b64c2bL 0x7eb17cbdL 0xe7b82d07L ,
        
0x90bf1d91L 0x1db71064L 0x6ab020f2L 0xf3b97148L 0x84be41deL ,
        
0x1adad47dL 0x6ddde4ebL 0xf4d4b551L 0x83d385c7L 0x136c9856L ,
        
0x646ba8c0L 0xfd62f97aL 0x8a65c9ecL 0x14015c4fL 0x63066cd9L ,
        
0xfa0f3d63L 0x8d080df5L 0x3b6e20c8L 0x4c69105eL 0xd56041e4L ,
        
0xa2677172L 0x3c03e4d1L 0x4b04d447L 0xd20d85fdL 0xa50ab56bL ,
        
0x35b5a8faL 0x42b2986cL 0xdbbbc9d6L 0xacbcf940L 0x32d86ce3L ,
        
0x45df5c75L 0xdcd60dcfL 0xabd13d59L 0x26d930acL 0x51de003aL ,
        
0xc8d75180L 0xbfd06116L 0x21b4f4b5L 0x56b3c423L 0xcfba9599L ,
        
0xb8bda50fL 0x2802b89eL 0x5f058808L 0xc60cd9b2L 0xb10be924L ,
        
0x2f6f7c87L 0x58684c11L 0xc1611dabL 0xb6662d3dL 0x76dc4190L ,
        
0x01db7106L 0x98d220bcL 0xefd5102aL 0x71b18589L 0x06b6b51fL ,
        
0x9fbfe4a5L 0xe8b8d433L 0x7807c9a2L 0x0f00f934L 0x9609a88eL ,
        
0xe10e9818L 0x7f6a0dbbL 0x086d3d2dL 0x91646c97L 0xe6635c01L ,
        
0x6b6b51f4L 0x1c6c6162L 0x856530d8L 0xf262004eL 0x6c0695edL ,
        
0x1b01a57bL 0x8208f4c1L 0xf50fc457L 0x65b0d9c6L 0x12b7e950L ,
        
0x8bbeb8eaL 0xfcb9887cL 0x62dd1ddfL 0x15da2d49L 0x8cd37cf3L ,
        
0xfbd44c65L 0x4db26158L 0x3ab551ceL 0xa3bc0074L 0xd4bb30e2L ,
        
0x4adfa541L 0x3dd895d7L 0xa4d1c46dL 0xd3d6f4fbL 0x4369e96aL ,
        
0x346ed9fcL 0xad678846L 0xda60b8d0L 0x44042d73L 0x33031de5L ,
        
0xaa0a4c5fL 0xdd0d7cc9L 0x5005713cL 0x270241aaL 0xbe0b1010L ,
        
0xc90c2086L 0x5768b525L 0x206f85b3L 0xb966d409L 0xce61e49fL ,
        
0x5edef90eL 0x29d9c998L 0xb0d09822L 0xc7d7a8b4L 0x59b33d17L ,
        
0x2eb40d81L 0xb7bd5c3bL 0xc0ba6cadL 0xedb88320L 0x9abfb3b6L ,
        
0x03b6e20cL 0x74b1d29aL 0xead54739L 0x9dd277afL 0x04db2615L ,
        
0x73dc1683L 0xe3630b12L 0x94643b84L 0x0d6d6a3eL 0x7a6a5aa8L ,
        
0xe40ecf0bL 0x9309ff9dL 0x0a00ae27L 0x7d079eb1L 0xf00f9344L ,
        
0x8708a3d2L 0x1e01f268L 0x6906c2feL 0xf762575dL 0x806567cbL ,
        
0x196c3671L 0x6e6b06e7L 0xfed41b76L 0x89d32be0L 0x10da7a5aL ,
        
0x67dd4accL 0xf9b9df6fL 0x8ebeeff9L 0x17b7be43L 0x60b08ed5L ,
        
0xd6d6a3e8L 0xa1d1937eL 0x38d8c2c4L 0x4fdff252L 0xd1bb67f1L ,
        
0xa6bc5767L 0x3fb506ddL 0x48b2364bL 0xd80d2bdaL 0xaf0a1b4cL ,
        
0x36034af6L 0x41047a60L 0xdf60efc3L 0xa867df55L 0x316e8eefL ,
        
0x4669be79L 0xcb61b38cL 0xbc66831aL 0x256fd2a0L 0x5268e236L ,
        
0xcc0c7795L 0xbb0b4703L 0x220216b9L 0x5505262fL 0xc5ba3bbeL ,
        
0xb2bd0b28L 0x2bb45a92L 0x5cb36a04L 0xc2d7ffa7L 0xb5d0cf31L ,
        
0x2cd99e8bL 0x5bdeae1dL 0x9b64c2b0L 0xec63f226L 0x756aa39cL ,
        
0x026d930aL 0x9c0906a9L 0xeb0e363fL 0x72076785L 0x05005713L ,
        
0x95bf4a82L 0xe2b87a14L 0x7bb12baeL 0x0cb61b38L 0x92d28e9bL ,
        
0xe5d5be0dL 0x7cdcefb7L 0x0bdbdf21L 0x86d3d2d4L 0xf1d4e242L ,
        
0x68ddb3f8L 0x1fda836eL 0x81be16cdL 0xf6b9265bL 0x6fb077e1L ,
        
0x18b74777L 0x88085ae6L 0xff0f6a70L 0x66063bcaL 0x11010b5cL ,
        
0x8f659effL 0xf862ae69L 0x616bffd3L 0x166ccf45L 0xa00ae278L ,
        
0xd70dd2eeL 0x4e048354L 0x3903b3c2L 0xa7672661L 0xd06016f7L ,
        
0x4969474dL 0x3e6e77dbL 0xaed16a4aL 0xd9d65adcL 0x40df0b66L ,
        
0x37d83bf0L 0xa9bcae53L 0xdebb9ec5L 0x47b2cf7fL 0x30b5ffe9L ,
        
0xbdbdf21cL 0xcabac28aL 0x53b39330L 0x24b4a3a6L 0xbad03605L ,
        
0xcdd70693L 0x54de5729L 0x23d967bfL 0xb3667a2eL 0xc4614ab8L ,
        
0x5d681b02L 0x2a6f2b94L 0xb40bbe37L 0xc30c8ea1L 0x5a05df1bL ,
        
0x2d02ef8dL
};
DWORD KFile::GetFileCRC32(LPCTSTR lpszFileName, 
int  nType  /*  = 0  */ )
{    
    HANDLE hFile 
=  ::CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ  |  FILE_SHARE_WRITE,
                           NULL, OPEN_EXISTING,
                          FILE_FLAG_SEQUENTIAL_SCAN, NULL);

    
if   ( hFile  ==  INVALID_HANDLE_VALUE )   return   0 ;
    DWORD dwSize 
=  ::GetFileSize(hFile, NULL);     
    
char *    pData  =   new    char [ dwSize ];
    
if   ( pData  ==  NULL )   return   - 1 ;

    DWORD bytes_read 
=   0   ;
    ::ReadFile(hFile,pData,dwSize,
& bytes_read, NULL);
    ::CloseHandle(hFile);    
    
    
// 计算crc
     char *   pCrcData  =  pData;
    ULONG  crc(
0xffffffff );    
    
while (dwSize -- )
        crc 
=  (crc  >>   8 ^  Crc32Table[(crc  &   0xFF ^   * pCrcData ++ ];

    delete [] pData;
    
return  crc ^ 0xffffffff ;    
}

你可能感兴趣的:(CRC)