Добрый день.
Помогите перевести код 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); }
должно получиться A819, но не получается. Помогите найти ошибку.Код: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;




Ответить с цитированием
