Добрый день.
Помогите перевести код CRC-16/ARC с С++
Код:
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
static uint16_t CRC16_ARC(uint8_t *data, size_t len) {
uint16_t crc = 0x0000;
size_t j;
int i;
// Note: 0xA001 is the reflection of 0x8005
for (j=len; j>0; j--) {
crc ^= *data++;
for (i=0; i<8; i++) {
if (crc & 1) crc = (crc >> 1) ^ 0xA001;
else crc >>= 1;
}
}
return (crc);
}
У меня получилось следующее
Код:
var
data : POINTER TO BYTE;
SIZE : INT;
j: INT;
i: INT;
crc : WORD:=16#0000;
arr: array [0..3] of byte:= [10,11,12,13];
end_var
data :=ADR(arr[0]);
size :=4;
FOR j:=size TO 0 BY -1 DO
crc := data^;
FOR i:=0 TO 8 DO
IF WORD_TO_BOOL(crc AND 16#0001) THEN crc:= ( SHR(crc, 1) OR 16#A001);
ELSE crc := SHR(crc, 1); END_IF
END_FOR
data:=data + SIZEOF(data^);
END_FOR
crc16ROCplus_1 := crc;
должно получиться A819, но не получается. Помогите найти ошибку.