Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизПомогите, CRC-16 Найти похожие ветки
← →
grach (2005-11-28 15:03) [0]Пожалуйста, уважаемые, растолкуйте алгоритм вычисления имеющий следующее
описание :
"The ROC protocol applies a cyclical redundancy check (CRC) to the message
string to produce a 16-bit remainder.
This remainder is referred to as the CRC-16 code. The CRC-16 code is
appended to the end of the message string.
The 16-bit polynomial used by the ROC is the CRC-16:
X16 + X15 + X2 + 1
The standard GPLIB CRC routine is used by the ROC. The ROC calculates CRC by
table lookup,
with the initial condition of 0000 (zeros).
An example:
01 02 03 01 B4 04 01 2E 00 33 D3 E4 "
искомое значение 2-а последних байта ^^^^^^.(В описании другой пример,
этот взят из логов монитора порта).
Может кто встречал эту "standard GPLIB CRC routine" .
Алгоритм используемый Modbus даёт другое значение.
Благодарю .
С уважением Жигайлов Роман.
← →
PeaK © (2005-11-28 17:30) [1]Итак, чего-то программируется, может даже на ком-порт... :-)
А документацию что есть целиком где-нить выложить реально?
← →
tesseract © (2005-11-29 10:07) [2]Не моё.
Функция CRC16 из протокола Z/X/Y-modem.
function CalcCRC16(P:PCHAR; Len:word):word;
var iByte,i:word; B:byte;
begin
{$R-}
Result:=$FFFF;
For i:=0 to Len-1 do
begin
b:=Byte(Pointer(LongInt(P)+iByte)^);
REsult:=(result and $FF00) + (B xor Lo(result));
For i:=1 to 8 do
begin
if ((Result and $0001)<>0) then
result:= (Result shr 1) xor $A001;
else
result:=(result shr 1);
end;
end;
{$R+}
end;
← →
PeaK © (2005-11-29 11:43) [3]Контрольная сумма CRC высчитывается для того, что бы подтвердить правильность сообщения и попытаться исключить возможность его изменения. Немного работал с разными девайсами, каждая сумма рассчитывается немного по разному :-)
Мануал полный нужен... :-)
← →
PAVIA © (2005-11-29 23:16) [4]Тех данных, что привел автор достаточно.
function CalcCRC16(P:PCHAR; Len:word):word;
var i,j: integer;
t: byte;
c: word;
begin
c:=0;
for i:=0 to len-1 do
begin
t:=Byte(p[i]);
for j:=1 to 8 do
begin
if (t xor c) and 1=1 then
begin
c:=(c shr 1) xor $A001;
end
else
c:=c shr 1;
t:=t shr 1;
end;
end;
result:=c;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c