Вы, наверное, сталкивались со случаями, когда вставляешь сильно царапанный диск, а привод его читает. Так вот, это не что иное, как восстановление блоков информации при помощи знаменитых кодов Рида-Сломона. Достигается это небольшой избыточностью информации, записанной на диск в довескок к данным, и эта избыточная информаци, есть не что иное, как контрольные суммы вашей информации. По этому же смому принципу построены все жесткие диски и все Raid массивы. Все они используют коррекцию данных кодами Рида-Соломона. Вся представленная в нэте инфа по программным кодам, основана на С. Я постарался восполнить этот пробел и переделал код С на Delphi. Этого кода на Delphi вы не найдете нигде, его просто нет.
Представлю прототип кодера/декодера кодов Рида-Соломона на IC, может пощупать всю прелесть его работы. Представленный кодер использует коды РС следующей схемы -- 255, 231, 12, где 255 -- общая длина блока, 231 -- длина ваших данных, 12 -- количество байтовых ошибок (не битовых, а именно байтовых)
hiasm_rs_encode_decode_full.sha
Этот топик читают: Гость
Разработчик
Ответов: 26257
Рейтинг: 2140
|
|||
карма: 22 |
| ||
файлы: 1 | hiasm_rs_encode_decode_full.sha [20.6KB] [429] |
Ответов: 1321
Рейтинг: 37
|
|||
Не все данные восстанавливает, но всё-же восстанавливает ,например 132432 число не восстанавливает
|
|||
карма: 0 |
|
Ответов: 8945
Рейтинг: 824
|
|||
nesco, молодец!
Восстанавливает при изменении порядка следования и символов, при одновременном изменении количества принятых символов -- не доставляет справа столько же символов, а изменение количества (ну не прочёлся один, или два) тоже распространённая ошибка. |
|||
карма: 19 |
|
Разработчик
Ответов: 26257
Рейтинг: 2140
|
|||
Я же написал, что это -- прототип. Не вся концепци упихивания и восстановления блоков меньшей длины проработана
Roma писал(а): например 132432 число не восстанавливаетконкретнее можно, интересует последовательность действий ![]() Да, действительно, количество символов меньше 12, вот потому и не восстанавливает, это ошибка не кодера, а схемы |
|||
карма: 22 |
|
Ответов: 1321
Рейтинг: 37
|
|||
nesco, писал(а): конкретнее можно, интересует последовательность действийГовори |
|||
карма: 0 |
|
Разработчик
Ответов: 26257
Рейтинг: 2140
|
|||
Roma писал(а): ГовориЯ тебя хотел спросить, но догадался сам |
|||
карма: 22 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
Roma писал(а): Говори![]() ![]() nesco, подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна" ------------ Дoбавленo в 14.30: nesco опередил ![]() |
|||
карма: 10 |
|
Ответов: 1321
Рейтинг: 37
|
|||
[flood]Запутался
![]() |
|||
карма: 0 |
|
Ответов: 3349
Рейтинг: 233
|
|||
nesco, А как это может помочь, когда исходная строка неизвестна?
|
|||
карма: 1 |
|
Ответов: 8945
Рейтинг: 824
|
|||
Iva-a-ann, она и неизвестна
![]() |
|||
карма: 19 |
|
Разработчик
Ответов: 26257
Рейтинг: 2140
|
|||
Ivann писал(а): когда исходная строка неизвестна?Ты че, сбрендил ![]() Ну причем здесь исходная строка, и как она может быть неизвестна ![]() На этапе приема/передачи данных происходит порча информации, код ее пытается восстановить ------------ Дoбавленo в 14.51: Assasin писал(а): подтверждаю, вводим 132432 в Исходная строка, жмем Encrypt, потом Decrypt, "коррекция невозможна"Бывают случаи, когда код не может решить уравнения и не находит его корни |
|||
карма: 22 |
|
Ответов: 1321
Рейтинг: 37
|
|||
Я немогу понять принцип работы программы, как восстанавливаются данные?
|
|||
карма: 0 |
|
Разработчик
Ответов: 26257
Рейтинг: 2140
|
|||
Roma писал(а): Я немогу понять принцип работы программы, как восстанавливаются данные?Молча ![]() ![]() |
|||
карма: 22 |
|
Ответов: 3349
Рейтинг: 233
|
|||
nesco писал(а): Ну причем здесь исходная строка, и как она может быть неизвестнаВсе, понял ![]() |
|||
карма: 1 |
|
Разработчик
Ответов: 4698
Рейтинг: 426
|
|||
nesco, да ведь на основе этого кода можно делать архиватор, передаем первыми двумя байтами первые два байта исходной строки, потом в 4 следующих длину исходной строки, приемщик дополняет всю строку до нужной длинны пробелами и расшифровывает
![]() Вопрос только в том, всегда ли сможет код решить систему уравнений ![]() ![]() ------------ Дoбавленo в 15.06: Хехехе, что-то я совсем, на сам код Рида тоже надо байты ![]() |
|||
карма: 10 |
|