2015-04-28 2 views
5

Я нашел эту реализацию CRC32 в Интернете, немного изменил ее, но я не могу заставить ее работать. Я инициализировать его и обновлять его каждый байт я получаю от входа, но хэш-я не то, что должно быть ...Реализация CRc32 C - не работает

typedef struct { 
    unsigned short xor; 
} xor_context; 
void crc32_init(crc32_context *context) { 
    context->crc = 0xFFFFFFFF; 
} 
void crc32_update(crc32_context *context, unsigned char byte) { 
    uint32_t crc, mask; 

    crc = context->crc; 
    crc = crc^byte; 
    for (int j = 7; j >= 0; j--) { // Do eight times. 
     mask = -(crc & 1); 
     crc = (crc >> 1)^(0xEDB88320 & mask); 
    } 
    context->crc = ~crc; 
} 

Это один оригинальна

unsigned int crc32b(unsigned char *message) { 
    int i, j; 
    unsigned int byte, crc, mask; 

    i = 0; 
    crc = 0xFFFFFFFF; 
    while (message[i] != 0) { 
     byte = message[i];   // Get next byte. 
     crc = crc^byte; 
     for (j = 7; j >= 0; j--) { // Do eight times. 
     mask = -(crc & 1); 
     crc = (crc >> 1)^(0xEDB88320 & mask); 
     } 
     i = i + 1; 
    } 
    return ~crc; 
} 
+0

Изменить его Тогда? – Persixty

+0

тоже не будет работать, я попробовал – kiro135

+0

Вы уверены, что полином правильный? – fuz

ответ

2
//typedef struct { 
// unsigned short xor; 
//} xor_context;//--> Not sure what part this plays in the code! 

void crc32_init(crc32_context *context) { 
    context->crc = 0xFFFFFFFF; 
} 

void crc32_update(crc32_context *context, unsigned char byte) { 
    uint32_t crc, mask; 

    crc = context->crc; 
    crc = crc^byte; 
    for (int j = 7; j >= 0; j--) { // Do eight times. 
     mask = -(crc & 1); 
     crc = (crc >> 1)^(0xEDB88320 & mask); 
    } 
    //context->crc = ~crc; //<-- Don't perform for every byte. 
    context->crc = crc; //EDIT: Forgot this! 
} 

//Completes the check. 
uint32_t crc32_complete(crc32_context *context){ 
    return ~context->crc; 
} 
+0

Отлично, спасибо за помощь. Я был в отчаянии в течение 3 дней: D – kiro135

+0

@ kiro135 Вы получили мое редактирование? Мне было слишком тяжело сдавать «нет». См. Выше. – Persixty

+1

Да, я понял. Спасибо – kiro135

 Смежные вопросы

  • Нет связанных вопросов^_^