Форум » [x]Harbour » функция для вычисления LRC » Ответить

функция для вычисления LRC

MIKHAIL: Есть функция для вычисления LRC или подскажите алгоритм как реализовать ?

Ответов - 11 новых

Andrey: MIKHAIL пишет: Есть функция для вычисления LRC Что за функция такая ? Первый раз слышу про неё.

MIKHAIL: Andrey пишет: Что за функция такая ? Это контрольная сумма строки, что то наподобие CRC Контрольная сумма LRC. Метод LRC проверяет содержание сообщения исключая начальный символ ":" и пару CRLF. LRC это 1 байт. LRC вычисляется передающим устройством и добавляется в конец сообщения. Принимающее устройство вычисляет LRC в процессе приема сообщения и сравнивает его с принятым от главного. Если есть несовпадение, то имеет место ошибка.

PSP: https://en.wikipedia.org/wiki/Longitudinal_redundancy_check


MIKHAIL: 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 )

Dima: MIKHAIL MD5 не покатит для этой цели ?

MIKHAIL: Dima пишет: MD5 не покатит для этой цели ? Правила прописывают разработчики оборудования, я их поменять не могу...

Pasha: [pre]#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 ); } [/pre]

ММК: 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

MIKHAIL: Pasha это нужно вставить через Pragma ? А вызов HB_LRC(str) ?

MIKHAIL: ММК пишет: 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 Спасибо, протестирую

Pasha: MIKHAIL пишет: это нужно вставить через Pragma ? А вызов HB_LRC(str) ? Ну да, или в конце модуля prg вставить через #pragma, или собрать как отдельный c-модуль Вызов да, HB_LRC(str)



полная версия страницы