unsigned short int Ccitt16Table[ 256 ]; void BuildTable16( ) { int i; int j; int k; int crc; for ( i = 0 ; i < 256 ; i++ ) { k = i << 8; crc = 0; for ( j = 0 ; j < 8 ; j++ ) { if ( ( crc ^ k ) & 0x8000 ) crc = ( crc << 1 ) ^ 0x1021; else crc <<= 1; k <<= 1; } Ccitt16Table[ i ] = crc; } } #define CalculateCharacterCRC16(crc,c) (unsigned short int) ( ( crc << 8 ) ^ Ccitt16Table[ (crc >> 8 ) ^ c ] )