RE:CRC32
Publicado por
Julio Návaez (1 intervención) el 04/04/2006 13:40:43
#include <stdio.h>
#include <stdlib.h>
int int997=997;
double dbl=0.0;
unsigned long crc32_table[256];
unsigned long Reflect(unsigned long ref, char ch);
int Get_CRC(char text[255]);
double modulo997(double m );
void Init_CRC32_Table()
{
unsigned long ulPolynomial = 0x04c11db7;
int i;
int j;
for(i = 0; i <= 0xFF; i++) {
crc32_table[i]=Reflect(i, 8) << 24;
for (j = 0; j < 8; j++)
crc32_table[i] = (crc32_table[i] << 1) ^ (crc32_table[i] & (1 << 31) ? ulPolynomial : 0);
crc32_table[i] = Reflect(crc32_table[i], 32);
}
}
unsigned long Reflect(unsigned long ref, char ch)
{
unsigned long value=(0);
int i;
for(i = 1; i < (ch + 1); i++)
{
if(ref & 1)
value |= 1 << (ch - i);
ref >>= 1;
}
return value;
}
int Get_CRC(char text[255])
{
unsigned long ulCRC=0xffffffff;
int len;
unsigned char* buffer;
len = strlen(text);
buffer = (unsigned char*)text;
while(len--)
ulCRC = (ulCRC >> 8) ^ crc32_table[(ulCRC & 0xFF) ^ *buffer++];
return ulCRC ^ 0xffffffff;
}
int main(void)
{
char cadena[255]="\0";
unsigned long nCRC=0;
printf("\nDigite cadena : ");
gets(cadena);
Init_CRC32_Table();
nCRC=Get_CRC(cadena);
printf("\ncrc32 es %10u\n\n",nCRC);
system("pause");
return 0;
}
double modulo997(double m ){
dbl = fmod(m,int997);
return dbl;
}