home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 21
/
CD_ASCQ_21_040595.iso
/
dos
/
prg
/
c
/
complzw
/
crc32.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1995-01-29
|
1KB
|
52 lines
#include "crc32.h"
CRC32::crc CRC32::MASQUE = 0xFFFFFFFF ;
CRC32::crc CRC32::POLYNOME = 0xEDB88320 ;
CRC32::crc CRC32::TABLE[ 256 ] = { 0L } ;
unsigned char CRC32::TABLE_OK = 0 ;
CRC32::CRC32() : CRC( MASQUE )
//
// Le constructeur de la classe génère une table de coefficients, une
// fois pour toutes : la table est static, et sa construction valide
// un booléen qui témoignera que ceci fut fait.
{
construireTable() ;
}
void CRC32::construireTable()
{
if( TABLE_OK ) // fut déjà construite
return ;
// construction de la table (cf la littérature)
// les détails m'échappent, autant qu'à vous
// (sauf votre respect !)
for( unsigned i = 0 ; i < 256 ; ++i )
{
crc valeur = i ;
for( unsigned j = 8 ; j > 0 ; --j )
{
if( valeur & 1 )
valeur = ( valeur >> 1 ) ^ POLYNOME ;
else
valeur >>= 1 ;
}
TABLE[ i ] = valeur ;
}
TABLE_OK = 1 ; // pour savoir que la table est construite
}
CRC32::crc CRC32::valeur( const unsigned char * tampon, unsigned n )
//
// Calcule le crc pour n octets commençant à l'adresse tampon.
// Les détails de la formule furent trouvés dans la littérature.
{
while( n-- != 0 )
CRC = ( ( CRC >> 8 ) & 0x00FFFFFF ) ^ TABLE[ 0xFF & ( ( unsigned int )CRC ^ ( unsigned int )( *tampon++ ) ) ] ;
return CRC ;
}