ne_viens
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору В WinHex'е такой: Код: program crc16; uses SysUtils; function reversebits(x :Word; bits :Integer) :Word; var i, ret :Integer; begin ret := 0; for i := 1 to bits do begin ret := (ret shl 1) or (x and 1); x := x shr 1; end; reversebits := ret; end; function crc16(inp :array of Byte; len :Integer) :Word; var i, j :Integer; crc, tmp :Word; begin crc := 0; for j := 0 to len - 1 do begin tmp := reversebits(inp[j], 8); crc := crc xor (tmp shl 8); for i := 0 to 7 do begin if (crc and $8000) <> 0 then crc := (crc shl 1) xor $8005 else crc := crc shl 1; end; end; crc16 := reversebits(crc, 16); end; var g_inp: array[0..15] of byte = ($30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$61,$62,$63,$64,$65,$66); begin writeln('PasCRC: 'IntToHex(crc16(g_inp, 16), 2)); end. | Код под FPC, для Delphi, возможно, придётся напильником поработать. |