Цитата:
Сообщение от AlexMPEI
вот исходный код на С. Помогите сделать из него ф-ю Delphi со string на входе
Код:
uint16_t WordCrc16 (uint8_t *Data, uint16_t size)
{
uint16_t w;
uint8_t shift_cnt,f;
uint8_t *ptrByte;
uint16_t byte_cnt = size;
ptrByte = Data;
w = (uint16_t)0xffff;
for (;byte_cnt>0;byte_cnt--)
{
w = (uint16_t)(w^(uint16_t)(*ptrByte++));
for (shift_cnt = 0; shift_cnt<8; shift_cnt++)
{
f=(uint8_t)((w)&(0x1));
w>>=1;
if ((f) ==1)
w = (uint16_t)((w)^0xa001);
}
}
return w;
}
|
Примерно так (только проверь - может где ошибся):
Код:
function WordCrc16(const Data: AnsiString): Word;
var
w: Word absolute Result;
shift_cnt, f: Byte;
ptrByte: PByte;
byte_cnt: Integer;
begin
byte_cnt := Length(Data);
ptrByte := Pointer(Data);
w := $FFFF;
while byte_cnt > 0 do
begin
w := w xor ptrByte^;
Inc(ptrByte);
for shift_cnt := 1 to 8 do
begin
f := w and $1;
w := w shr 1;
if f = 1 then w := w xor $A001;
end;
Dec(byte_cnt);
end;
end;