|
Сразу выложу исходник, вдруг сгодится;) Если надо, могу другие полиномы рассчитать в Си-код...
/******************************************************************************/
/* Algorithm title: CRC32 - PKZIP,AUTODIN II,Ethernet,FDDI */
/* Polynomial string: x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1 */
/* Polynomial factor: 0x4C11DB7 (79764919 as decimal) */
/* Width: 32 */
/* Type of polynomial: Reversed */
/* Initial value: 0xFFFFFFFF */
/* Final XOR: 0xFFFFFFFF */
/******************************************************************************/
#define __MEM_ATTR const
__MEM_ATTR unsigned long CrcLookup[16]= {
0x00000000, 0x1DB71064, 0x3B6E20C8, 0x26D930AC,
0x76DC4190, 0x6B6B51F4, 0x4DB26158, 0x5005713C,
0xEDB88320, 0xF00F9344, 0xD6D6A3E8, 0xCB61B38C,
0x9B64C2B0, 0x86D3D2D4, 0xA00AE278, 0xBDBDF21C
};
#define CrcNextNibble( CrcReg,NewData ) \
(unsigned long)((CrcReg>>4) ^ CrcLookup[(CrcReg^(NewData)) & 0xF])
unsigned long CrcCalculate( unsigned char *ptr,unsigned short len )
{
register unsigned long CrcReg;
CrcReg= 0xFFFFFFFF;
while( len-- != 0 ) {
CrcReg= CrcNextNibble( CrcReg,*ptr );
CrcReg= CrcNextNibble( CrcReg,(*ptr++)>>4 );
}/*while*/
CrcReg^= 0xFFFFFFFF;
return CrcReg;
}/*CrcCalculate*/
E-mail: info@telesys.ru