<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>I couldn't verify the code but it should be relatively close to
your c++ example. Not sure of the width of int type, I supposed
it's 16 bits wide:</p>
<pre>function CRC16( crc: Word; buf: PByte; len: Word; Poly:Word=$A001): Word;
var
pos: Word;
i: Word;
begin
for pos:= 0 to len-1
do
begin
crc:= crc xor Word(buf[pos]); // * XOR byte into least sig. byte of crc
// * Loop over each bit
for i:= 8 downto 1
do
begin
// * If the LSB is set
if ((crc and $0001) <> 0)
then
begin
// * Shift right and XOR 0xA001
crc:= crc shr 1;
crc:= crc xor Poly;
end
// * Else LSB is not set
else
// * Just shift right
crc:= crc shr 1;
end;
end;
Result:= crc;
end;
var
S: String;
begin
Readln( S);
WriteLn( IntToHex( CRC16( 0, PByte(@S[1]), Length(S), $8005), 4));
end.
</pre>
<br>
</body>
</html>