Автор | Сообщение |
|
| |
Пост N: 206
Зарегистрирован: 05.10.06
|
|
Отправлено: 21.05.19 19:06. Заголовок: функция для вычисления LRC
Есть функция для вычисления LRC или подскажите алгоритм как реализовать ?
|
|
|
Новых ответов нет
[см. все]
|
|
|
| постоянный участник
|
Пост N: 6292
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.05.19 20:03. Заголовок: MIKHAIL пишет: Есть..
MIKHAIL пишет: цитата: | Есть функция для вычисления LRC |
| Что за функция такая ? Первый раз слышу про неё.
|
|
|
|
| |
Пост N: 207
Зарегистрирован: 05.10.06
|
|
Отправлено: 21.05.19 20:18. Заголовок: Andrey пишет: Что з..
Andrey пишет: Это контрольная сумма строки, что то наподобие CRC Контрольная сумма LRC. Метод LRC проверяет содержание сообщения исключая начальный символ ":" и пару CRLF. LRC это 1 байт. LRC вычисляется передающим устройством и добавляется в конец сообщения. Принимающее устройство вычисляет LRC в процессе приема сообщения и сравнивает его с принятым от главного. Если есть несовпадение, то имеет место ошибка.
|
|
|
|
| постоянный участник
|
Пост N: 1524
Зарегистрирован: 27.01.07
|
|
Отправлено: 21.05.19 20:36. Заголовок: https://en.wikipedia..
|
|
|
|
| |
Пост N: 208
Зарегистрирован: 05.10.06
|
|
Отправлено: 21.05.19 21:28. Заголовок: PSP Set LRC = 0 For..
PSP цитата: | Set LRC = 0 For each byte b in the buffer do Set LRC = (LRC + b) AND 0xFF end do Set LRC = (((LRC XOR 0xFF) + 1) AND 0xFF) |
| Правильно я понимаю что каждый символ в строке необходимо перевести в восьмеричный код и затем использовать вместо XOR - hb_BitXor( x, y ) , а вместо AND - hb_BitAnd( x, y )
|
|
|
|
| |
Пост N: 7039
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.19 21:52. Заголовок: MIKHAIL MD5 не пока..
MIKHAIL MD5 не покатит для этой цели ?
|
|
|
|
| |
Пост N: 209
Зарегистрирован: 05.10.06
|
|
Отправлено: 21.05.19 22:02. Заголовок: Dima пишет: MD5 не ..
Dima пишет: цитата: | MD5 не покатит для этой цели ? |
| Правила прописывают разработчики оборудования, я их поменять не могу...
|
|
|
|
| Администратор
|
Пост N: 3837
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.05.19 08:04. Заголовок: #include "hbapi...
#include "hbapi.h" HB_FUNC( HB_LRC ) { HB_ULONG ulLRC = 0; if( HB_ISCHAR(1) ) { char * sBuf = hb_parc( 1 ); HB_SIZE ulLen = hb_parclen( 1 ), i; for( i = 0; i < ulLen; i ++, sBuf ++) { ulLRC = ( ulLRC + *sBuf ) && 0xFF; } ulLRC = (((ulLRC ^ 0xFF) + 1) && 0xFF); } hb_retnl( ulLRC ); }
|
|
|
|
| постоянный участник
|
Пост N: 357
Зарегистрирован: 29.05.10
|
|
Отправлено: 22.05.19 10:07. Заголовок: MIKHAIL пишет: не м..
MIKHAIL пишет: function LRC( cText ) local nCheckSum := 0 local n for n = 1 to Len( cText ) nCheckSum = nXor( nCheckSum, Asc( SubStr( cText, n, 1 ) ) ) next return nCheckSum
|
|
|
|
| |
Пост N: 210
Зарегистрирован: 05.10.06
|
|
Отправлено: 22.05.19 10:08. Заголовок: Pasha это нужно вст..
Pasha это нужно вставить через Pragma ? А вызов HB_LRC(str) ?
|
|
|
|
| |
Пост N: 211
Зарегистрирован: 05.10.06
|
|
Отправлено: 22.05.19 10:13. Заголовок: ММК пишет: for n =..
ММК пишет: цитата: | for n = 1 to Len( cText ) nCheckSum = nXor( nCheckSum, Asc( SubStr( cText, n, 1 ) ) ) next |
| так наверное покороче цитата: | for each n in cText nCheckSum = nXor( nCheckSum, Asc( n ) ) next |
| Спасибо, протестирую
|
|
|
|
| Администратор
|
Пост N: 3838
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.05.19 11:03. Заголовок: MIKHAIL пишет: это ..
MIKHAIL пишет: цитата: | это нужно вставить через Pragma ? А вызов HB_LRC(str) ? |
| Ну да, или в конце модуля prg вставить через #pragma, или собрать как отдельный c-модуль Вызов да, HB_LRC(str)
|
|
|
|