Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 841

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Подскажите, пожалуйста, как в делфи реализовать crc-деление? я знаю что, действия аналогичны
простому делению в столбик с применением CRC-сложения.
Если число A получено умножением числа B, то в CRC арифметике это означает,
что существует возможность сконструировать число A из нуля, применяя операцию
XOR к число B, сдвинутому на различное количество позиций. Например, если A равно
0111010110,а B – 11,то мы может сконструировать A из B следующим способом:
0111010110
=.......11.
+....11....
+...11.....
+.11.......
Однако, если бы A было бы равно 0111010111,то нам бы не удалось составить его с
помощью различных сдвигов числа 11. Поэтому что, как говорят в CRC арифметике, оно
не делится на B.
Информация есть тут - http://embedded.ifmo.ru/embedded_old/ETC/REFERAT/crc/crc.htm
интуитивно то понятно, а вот с делфи проблемы

NeStor Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: NeStor (статус: Посетитель)
Вопрос отправлен: 25 декабря 2011, 21:36
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 8 января 2012, 18:54; участников в обсуждении: 4.
Drinkenz

Drinkenz (статус: 1-ый класс), 26 декабря 2011, 00:22 [#1]:

Можно попытаться использовать функции наподобие этих:

// длина числа в битах
function len(x: longword): integer;
var i: integer;
begin
result:= 0;
for i:= 0 to 31 do
  if ((1 shl i) and x) > 0 then
    result:= i + 1;
end;
 
 
// crc деление
function divide(x,y: longword): longword;
var i: integer;
begin
for i:= len(x) - 1 downto len(y) - 1 do
  if (( x shr i) and 1 ) = 1 then
    x:= x xor (y shl (i - len(y) + 1));
result:= x;
end;
NeStor

NeStor (статус: Посетитель), 26 декабря 2011, 02:38 [#2]:

а можно немного прокомметрировать написанное?? divide выводит количество бит числа, полученного в результате деления или как?
а двоичные коды символов прокатит считать?
bugmenot

bugmenot (статус: 3-ий класс), 26 декабря 2011, 06:58 [#3]:

Чтобы понять, что такое CRC-деление, надо выпить не менее 100 CRC-грамм CRC-коньяку.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Толяныч

Толяныч (статус: 4-ый класс), 26 декабря 2011, 16:55 [#4]:

Я не очень понимаю, что такое мудренное "CRC деление". Есть вычисление циклического избыточного кода CRC для контроля сохранности информации при передаче или хранении. Для реализации этой функции в целом множестве работающих проектов мне достаточно было информации по банальной, но достаточно информативной ссылке
http://ru.wikipedia.org/wiki/CRC
Я применил табличный метод, который очень просто портируется под различные платформы - от РС-совместимого компа до несложного микроконтроллера, у которого даже операций умножения-деления нет. Результат неизменно положительный. Могу, если надо, скинуть реально работающую п.п вычисления CRC на Delphi этим методом.
Если требуется раскопать проблему до глубины истоков, стоит пройтись по приведенному множеству ссылок.
С теми, кто считает, что Вики - для домохозяек, я не согласен, она дает обзорное изложение предмета и направления для углубленного изучения.
bugmenot

bugmenot (статус: 3-ий класс), 8 января 2012, 18:54 [#5]:

Цитата (Толяныч):

С теми, кто считает, что Вики - для домохозяек, я не согласен, она дает обзорное изложение предмета и направления для углубленного изучения.

Ну, во-первых ласково называть русскую педивикию просто «Вики» с большой буквы - задротство. А во-вторых, ничто не мешает появлению там нормальных технических статей. Это как бы не значит, что все там статьи обязательно будут такие. Конкретно эту статью вообще в wikibooks надо перетаскивать.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 27 марта 2023, 03:11
Выполнено за 0.03 сек.
Рейтинг@Mail.ru