<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>