Функция Calculate_CRC32. Как мне преобразовать его в вычисление байтов, а не битов

Я помогаю своему другу, который немного застрял, и мои собственные навыки C ++ очень ржавые. Мой интерес и любопытство довольно выбраны этим. поэтому я постараюсь объяснить это как можно лучше. Обратите внимание, что это 32-битная проверка.

uint32_t CRC32::calculate_CRC32(const uint32_t* plData, uint32_t lLength, uint32_t     previousCrc32)
{
uint32_t lCount;
const uint32_t lPolynomial = 0x04C11DB7;
uint32_t lCrc = previousCrc32;
unsigned char* plCurrent = (unsigned char*) plData;
lCrc ^= *plCurrent++;

while (lLength-- != 0)
{
for (lCount = 0 ; lCount < lLength; lCount++)
{
if (lCrc & 1)
lCrc = (lCrc >> 8) ^ lPolynomial;
else
lCrc = lCrc >> 8;
}
}

return lCrc;
}

Теперь ILength — это количество байтов в пакете. plData — это пакет, для которого необходимо проверить данные. Как есть, функция работает. Но это работает понемногу. Это должно быть улучшено, чтобы работать байт за байтом. Так что всем гениальным разработчикам на С ++, которые намного превосходят мои знания. Любые идеи будут действительно полезны. Заранее спасибо, ребята.

0

Решение

Читать Росс Уильямс отличный учебник по CRC, особенно раздел 9 «Реализация на основе таблиц», в которой CRC вычисляется по байту за раз, а не по битам за раз. Вы также можете посмотреть на несколько более сложную Реализация CRC в zlib, который рассчитывает четыре байта за раз. Вы также можете рассчитать восемь байтов за раз.

2

Другие решения

Других решений пока нет …