Buenas
Debajo te pongo un codigo (basado en el tuyo) que calcula el crc de "hola mundo" con:
Valor Inicial = 0;
Valor Final XOR = 0;
Sin revertir los bytes y/o el valor del CRC antes del ultimo XOR.
Que viendo tu codigo creo que coincide.
El resultado del codigo lo he comprobado con el de la web:
http://zorc.breitbandkatze.de/crc.html
Y si te interesa el tema aqui tienes una guia:
http://www.cs.waikato.ac.nz/~312/crc.txt
Deberias comprobar con que opciones (las que puse arriba) fue generado el valor del CRC del fichero que tienes para pruebas.
Código C:
Ver originalint main(int argc, char *argv[])
{
int i=0,j=0;
int reg, byt;
unsigned int crc, eor;
unsigned char trama[500000],byte=0;
long bytes_fichero, bytes_cogidos;
/*
FILE *fichero;
if (argc != 2)
{
fprintf (stderr, "Numero de parametros incorrecto\n");
return -1;
}
fichero = fopen(argv[1],"rb"); //Abrimos el fichero para lectura binaria.
if (fichero == (FILE *) NULL)
{
fprintf (stderr, "Error abriendo el archivo [%s]\n", argv[1]);
return -1;
}
fseek(fichero,0L,SEEK_END); //Coloca el puntero al final del fichero.
bytes_fichero = ftell(fichero); //Nos dice la posicion del puntero.
rewind(fichero);
*/
crc = 0;
memcpy (trama
, "hola mundo", 10); bytes_fichero = bytes_cogidos = 10;
while(bytes_fichero>0)
{
/*
memset (trama, 0, sizeof(trama));
bytes_cogidos = fread(trama,sizeof(unsigned char),500000,fichero);
*/
for(j=0;j<bytes_cogidos;j++)
{
i=8;
byte = trama[j];
crc ^= (unsigned int)byte << 24;
for (i=0; i<8; i++)
{
eor = crc & 0x80000000 ? 0x4c11db7 : 0;
crc <<= 1;
crc ^= eor;
}
}
bytes_fichero = bytes_fichero-bytes_cogidos;
}
/*
fclose (fichero);
*/
fprintf (stderr
, "Valor del CRC: [%x]\n", crc
);
return 0;
}