home *** CD-ROM | disk | FTP | other *** search
- #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 ;
- }
-