Пожалуйста, уважаемые, растолкуйте алгоритм вычисления имеющий следующее
описание :
"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 даёт другое значение.
Здравствуйте, grach, Вы писали:
G>Пожалуйста, уважаемые, растолкуйте алгоритм вычисления имеющий следующее G>описание : G>"The ROC protocol applies a cyclical redundancy check (CRC) to the message G>string to produce a 16-bit remainder.
Стандартный CRC16. Реализацию можно посмотреть, например,здесь
Здравствуйте, Hellos, Вы писали:
H>Стандартный CRC16. Реализацию можно посмотреть, например,здесь
Посмотрел, попытался перевести на Паскаль, но увы. Помогите люди добрые, вот как я начал:
function CRC16_2(p : pointer; Len : Word) : word;
const
CRCTable : Array [0..255] of Word= (
$0000, $C0C1, $C181, $0140, $C301, $03C0, $0280, $C241...);
var b, i : byte;
begin
result:= 0;
for i:=0 to (len-1) do
begin
b:= Byte(Pointer(LongInt(P)+i)^);
result := (result shr 8) ^ CRCTable[(result ^ b) AND $ff];
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Вот это как перевести, что это за крышечки '^'?
end;
end;
Прошу прощения за сообщение не по теме форума.
Благодарю.