#define CRC_MASK 0xFFFFFFFFL #define CRC32_POLYNOMIAL 0xEDB88320L unsigned long Ccitt32Table[ 256 ]; /* This array holds the CRC */ /* table used to calculate the 32 */ /* bit CRC values. */ #define UpdateCharacterCRC32( crc , c) ((unsigned long)((crc >> 8) & 0x00FFFFFFL) ^ Ccitt32Table[ ( (int) crc ^ c ) & 0xff ]) void BuildCRCTable() { int i; int j; unsigned long value; for ( i = 0; i <= 255 ; i++ ) { value = i; for ( j = 8 ; j > 0; j-- ) { if ( value & 1 ) value = ( value >> 1 ) ^ CRC32_POLYNOMIAL; else value >>= 1; } Ccitt32Table[ i ] = value; } } // utilisation BuildCRCTable();// initialisation // calcul du crc pour la chaine de caracterze sz se teminant par \0 unsigned long original_crc=CRC_MASK; for(int i=0;sz[i];i++) { original_crc=UpdateCharacterCRC32(original_crc,sz[i]); } original_crc^=CRC_MASK;