Может ли кто-нибудь помочь мне в этом вычислении 32-битного CRC.
Это фрагмент кода, который я использовал для вычисления 32-битного CRC.
static unsigned int crc32_table[256];
void make_crc_table()
{
int j;
unsigned int crc,byte, mask;
/* Set up the table, if necessary. */
if (crc32_table[1] == 0)
{
for (byte = 0; byte <= 255; byte++)
{
crc = byte;
for (j = 7; j >= 0; j--) // Do eight times
{
mask = -(crc & 1);
crc = (crc >> 1) ^ (0xEDB88320 & mask);
}
crc32_table[byte] = crc;
}
}
for (j=0;j<10;j++)
printf("crc32_table[%d] = %x\n",j,crc32_table[j]);
}
unsigned int crc32cx(unsigned int crc,unsigned char *message,int len)
{
unsigned int word;
do
{
if((word = *(unsigned int *)message) & 0xFF)
{
crc = crc ^ word;
crc = (crc >> 8) ^ crc32_table[crc & 0xFF];
crc = (crc >> 8) ^ crc32_table[crc & 0xFF];
crc = (crc >> 8) ^ crc32_table[crc & 0xFF];
crc = (crc >> 8) ^ crc32_table[crc & 0xFF];
message = message + 4;
len--;
}
}while(len == 0);
return ~crc;
}
main()
{
unsigned int crc = 0xFFFFFFFF;
unsigned char buff[100] = ABCDEFGH;
int len; // lenght in bytes
len = (((strlen(buff)%8)==0) ? (strlen(buff)/8) : ((strlen(buff)/8)+1));
printf("lenght in bytes %d\n",len);
make_crc_table();
printf("crc = %x\n",crc32cx(crc,buff,len));
}
Может кто-нибудь помочь мне, почему это не соответствует онлайн-калькулятору 32-битного CRC. Ссылка приведена ниже
При вводе buff=12345678 моя CRC сопоставляется с онлайновой. Для других значений, таких как buff = ABCD1234, вывод не совпадает.
Спасибо.
unsigned char buff[100] = ABCDEFGH;
вы должны использовать кавычки, такие какunsigned char buff[100] = "ABCDEFGH";
- person Frodo   schedule 11.02.2016mask = -(crc & 1);
? Все задействованные числа являются беззнаковыми. - person Lundin   schedule 11.02.2016