Может быть, я просто не вижу этого, но CRC32 кажется либо слишком сложным, либо недостаточно объясненным, где бы я ни находился в Интернете.
Я понимаю, что это остаток от арифметического деления значения сообщения, не основанного на переносе, деленного на полином (генератор), но фактическая реализация этого ускользает от меня.
Я прочитал "Безболезненное руководство по алгоритмам обнаружения ошибок CRC", и должен сказать, что он не был безболезненным. Она довольно хорошо подходит к теории, но автор никогда не доходит до простого "вот оно". Он говорит, что это за параметры для стандартного алгоритма CRC32, но он пренебрегает, чтобы четко изложить, как вы к нему подходите.
Часть, которая получает меня, - это когда он говорит "это все", а затем добавляет: "О, кстати, это может быть изменено или может начинаться с других начальных условий", и не дает четкого ответа о том, каков окончательный путь. вычисления контрольной суммы CRC32 с учетом всех изменений, которые он только что добавил.
- Есть ли более простое объяснение того, как рассчитывается CRC32?
Я попытался кодировать в C, как таблица формируется:
for (i = 0; i < 256; i++)
{
temp = i;
for (j = 0; j < 8; j++)
{
if (temp & 1)
{
temp >>= 1;
temp ^= 0xEDB88320;
}
else {temp >>= 1;}
}
testcrc[i] = temp;
}
но это, кажется, генерирует значения, несовместимые со значениями, которые я нашел в других местах в Интернете. Я мог бы использовать значения, которые я нашел в Интернете, но я хочу понять, как они были созданы.
Любая помощь в выяснении этих невероятно запутанных чисел была бы очень признательна.