2015-11-18 2 views
0

Я искал алгоритм CRC32, но все, что я нашел, просто дал мне алгоритмы Checksum. Мне нужен алгоритм CRC32, который отправляет биты данных, проверяет и исправляет их. Например:Алгоритм коррекции CRC32 C

User input: "A" { 01000001 } 
I intentionally cause an error so data sent is: "C" { 01000011 } 

Есть ли алгоритм в C, который может сделать коррекцию таким образом "C" может быть скорректирована до "A"? Я просто нахожу «контрольную сумму CRC32», но ничего не исправляю, и я не очень понимаю, как это сделать.

ответ

1

CRC - это код обнаружения ошибок, но он не предоставляет достаточно информации, чтобы сообщить вам , который бит имел ошибку.

(mcdowella делает хороший комментарий): для коротких сообщений вы можете предположить, что однобитовые ошибки наиболее вероятны. Вы можете переборщить каждый бит отдельно, чтобы увидеть, получаете ли вы правильный CRC, перевернув этот бит. Некоторые многобитовые ошибки приведут этот метод к поиску неверного сообщения, имеющего тот же CRC, что и оригинал.


Для этого вам понадобится код для исправления ошибок. Вы обнаруживаете, какие части ввода были «стерты», используя коды обнаружения ошибок, такие как CRC или более сильный хеш, но затем вы используете код стирания, чтобы повторно генерировать плохие данные из хороших данных и блоков избыточности.

См., Например, PAR2 для полной сквозной системы для файлов, включая формат файла. Он использует Рида-Соломона с GaloisField < 2^16> для исправления ошибок.

+0

Мне нужно это разъяснение. Благодаря! : 3 –

+2

. однобитовые ошибки в коротких сообщениях, вы можете использовать синхронное декодирование. CRC32 является линейным, поэтому вы можете вычислить разницу между контрольной суммой, созданной всем ноль-сообщением, и контрольной суммой, созданной каждым сообщением, с одним набором бит. Если какое-либо из этих различий совпадает с разницей между наблюдаемой и ожидаемой контрольной суммой в полученном сообщении, было бы разумно предположить, что соответствующая одноразрядная позиция соответствует ошибке. – mcdowella

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