![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CRC [D7]
defen © (2012-01-03 11:58:00)Всем доброго времени суток. Подскажите пожалуйста, как быстро реализовать подсчет CRC для передаваемого пакета? Длинна пакета 136 байт Заголовок 2 байта, Счетчик 2байта, Длинна пакета 2байта, Данные 128байт. В конце CRC тоже 2 байта. по гуглу нашел только проверку CRC для готового файла, но применить к своей проге не смог, увы... :(
defen (2012-01-07 11:03:00) [1]Всем спасибо... Низкий поклон товарищу DVM © за оказанную помощь!!!
Sha (2012-01-06 09:32:00) [2]Удалено модератором
Sha (2012-01-06 09:32:00) [3]> на каждую ячейку массива ( их 134) типа Byte накладывать CRC, а потом склеивать?
мне неизвестны операция "накладывания на ячейку массива" и
операция "склеивания чисел"
> потому как перед отправкой данные из типа Byte переводятся в AnsiSrting...
проще сразу выбрать нужный тип данных
> Как эти значения сложить, чтобы не было ошибок?
очень редко имеет смысл как-то складывать значения CRC,
скорее всего тебе это не надо
или я снова чего-то не понял?
Конечно.
Боюсь показаться кэпом, но тебе, вероятно, надо вычислить CRC буфера,
а не сложить CRC байтов.
> данные в массиве примерно выглядят так
> [255,255,0,1,68,54,16,34,..до..135...,0,0] 135 и 136 будет СRС.
функции вычисления CRC это безразлично
> А отправляются в канал уже вот так 'яя'#1#0'какой-нибудь не читаемый символ'#A7#1D..до..135....#0#0 вот...
зачем отправлять переставленные (#1#0) нечитаемые символы вместо читаемых?
> по сути, весь пакет хранится в байтовом виде в массиве......
А не по сути - в строках?
По сути тебе достаточно, наконец, разобрать работу
любого примера вычисления CRC и отправки данных.
defen (2012-01-06 08:21:00) [4]по сути, весь пакет хранится в байтовом виде в массиве......
defen (2012-01-06 08:06:00) [5]данные в массиве примерно выглядят так [255,255,0,1,68,54,16,34,..до..135...,0,0] 135 и 136 будет СRС. А отправляются в канал уже вот так 'яя'#1#0'какой-нибудь не читаемый символ'#A7#1D..до..135....#0#0 вот...
defen (2012-01-06 07:52:00) [6]или я снова чего-то не понял?
defen (2012-01-06 07:50:00) [7]значит получается мне надо на каждую ячейку массива ( их 134) типа Byte накладывать CRC, а потом склеивать? потому как перед отправкой данные из типа Byte переводятся в AnsiSrting... Как эти значения сложить, чтобы не было ошибок?
defen (2012-01-06 04:12:00) [8]
> я бы предпочел чтобы мне посоветовали, а не взять с помойки
> "любой" код и потом гадать из-за чего чексуммы разные. Т.
> к. алгоритм - это одно, а реализация - другое :)
>
>
Спасибо, Кэп! ))
antonn (2012-01-05 13:36:00) [9]
> Германн © (05.01.12 04:35) [41]
>
>
> > Андреевич (04.01.12 21:06) [40]
> >
> > значит мне
> >
>
> Ну и зачем тебе понадобился ещё один ник на ДМ?
я уже говорил, что это не надобность.
> RWolf © (05.01.12 09:26) [43]
>
> не надо ничего создавать, инет завален алгоритмами расчёта
> crc любой разновидности на любых данных.
я бы предпочел чтобы мне посоветовали, а не взять с помойки "любой" код и потом гадать из-за чего чексуммы разные. Т.к. алгоритм - это одно, а реализация - другое :)
DVM (2012-01-05 11:07:00) [10]
> defen © (05.01.12 09:01) [42]
Вообще говоря тебе уже дали код, да и в интернет этого добра навалом. Могу дать еще:
http://dvmuratov.narod.ru/crc.pas
там для твоей задачи вероятно лучше всего подходит этот:
////////////////////////////////////////////////////////////////////////////////
// Имя алгоритма : CRC16-XMODEM (?????) //
// Стандарты : ITU-T V.41 //
// Где используется : XMODEM, PPP //
// Иннициализирующее значение : $0000 //
// Выходная XOR маска : $0000 //
// Входные данные : не инвертируются //
// Выходной CRC перед XOR : не инвертируется //
// Значение полинома : $1021 (Зеркальное значение = $8408) //
// Полином : x^16 + x^15 + x^2 + 1 //
// Значение для '123456789' : $31C3 //
////////////////////////////////////////////////////////////////////////////////
Anatoly Podgoretsky (2012-01-05 11:05:00) [11]
> Работает и Гипер Терминал (ZModem) но он до ужаса глючный,
> поэтому я пытаюсь создать что-то своё
И при этом у тебя проблема с CRC, не в состояние восспользоваться готовыми.
Anatoly Podgoretsky (2012-01-05 11:04:00) [12]
> народ, прекратите эту вербальную резню. мне нужно было организовать
> наложение CRC16 на строку (переменная Data_Paket_For_Send,
> File_Name :AnsiString;)
Тебя уже несколько раз спросили, какой именно CRC нужен, и привели несколько различных реализаций. Может за тебя программу надо написать?
defen (2012-01-05 10:50:00) [13]
> не надо ничего создавать, инет завален алгоритмами расчёта
> crc любой разновидности на любых данных.
спасибо за пост в тему...
RWolf (2012-01-05 09:26:00) [14]не надо ничего создавать, инет завален алгоритмами расчёта crc любой разновидности на любых данных.
defen (2012-01-05 09:01:00) [15]народ, прекратите эту вербальную резню. мне нужно было организовать наложение CRC16 на строку (переменная Data_Paket_For_Send, File_Name :AnsiString;) см [27].
Передаются данные через модем. В настоящий момент по протоколу Kermit. Работает и Гипер Терминал (ZModem) но он до ужаса глючный, поэтому я пытаюсь создать что-то своё... Если есть вопросы, задавайте пожалуйста без сарказма... на что смогу, отвечу.
Германн (2012-01-05 04:35:00) [16]
> Андреевич (04.01.12 21:06) [40]
>
> значит мне
>
Ну и зачем тебе понадобился ещё один ник на ДМ?
Андреевич (2012-01-04 21:06:00) [17]значит мне
DVM (2012-01-04 17:32:00) [18]
> Андреевич (04.01.12 16:37) [38]
>
>
> > фраза была адресована не тебе.
>
> в кому?
Там написано было кому - antonn © (04.01.12 12:51) [31].
Андреевич (2012-01-04 16:37:00) [19]
> фраза была адресована не тебе.
в кому?
DVM (2012-01-04 16:25:00) [20]
> Андреевич (04.01.12 15:37) [34]
> ну и еще вырву из контекста:
фраза была адресована не тебе.
> Это был ответ или оффтоп?
у меня к [1] вопросов нет. Хотя нет, есть один, что за метод вычисления CRC там? Какой полином? Желательно использовать методы рассчета, которые можно идентифицировать, иначе потом очень сложно будет с совместимостью и поддержкой.