История изменений
Исправление firkax, (текущая версия) :
Никакие поля Галуа для CRC не нужны. Я так и не понял почему про них везде пишут когда объясняют CRC, это только запутывает и никакой практической пользы не даёт. На самом деле CRC это вот:
1) инициализируем состояние (оно не обязано быть 32-битным, если что) всеми единицами
2) подаём из входных данных по одному биту, и на каждый входной бит делаем следующее:
2а) XOR-им самый младший бит (нулевой) состояния с входным битом данных
2б) сдвигаем состояние цикически вправо на 1 бит (то есть 3-й его бит становитя вторым, 2-й первым, 1-й нулевым, нулевой последним итд)
2в) если последний бит (он раньше был первым и мы его уже по-xor-или с битом данных) равен единице, то xor-им всё состояние с некоей константой
3) в самом конце обычно инвертируют то что получилось (это чтобы из нулевых входных данным получилось нулевой crc в не все единицы)
Исходная версия firkax, :
Никакие поля Галуа для CRC не нужны. Я так и не понял почему про них везде пишут когда объясняют CRC, это только запутывает и никакой практической пользы не даёт. На самом деле CRC это вот:
1) инициализируем состояние (оно не обязано быть 32-битным, если что) всеми единицами
2) подаём из входных данных по одному биту, и на каждый входной бит делаем следующее:
2а) XOR-им самый младший бит (нулевой) состояния с входным битом данных
2б) сдвигаем состояние цикически вправо на 1 бит (то есть 3-й его бит становитя вторым, 2-й первым, 1-й нулевым, нулевой последним итд)
2в) если последний бит (он раньше был первым и мы его уже по-xor-или с битом данных) равен единице, то xor-им всё состояние с некоей константой
3) в самом конце обычно инвертируют то что получилось (это чтобы из нулевых входных данным получилось нулевой crc в не все единицы)
Всё!