delphi crc校驗函數


function CalCRC16(AData: array of Byte; AStart, AEnd: Integer): string;
const
  GENP=$8408;  //多項式公式X16+X15+X2+1(1100 0000 0000 0101)  //$A001
var
  crc:Word;
  i:Integer;
  tmp:Byte;
  s:string;
procedure CalOneByte(AByte:Byte);  //計算1個字節的校驗碼
var
j:Integer;
begin
  crc:=crc xor AByte;   //將數據與CRC寄存器的低8位進行異或
  for j:=0 to 7 do      //對每一位進行校驗
  begin
    tmp:=crc and 1;        //取出最低位
    crc:=crc shr 1;        //寄存器向右移一位
    crc:=crc and $7FFF;    //將最高位置0
    if tmp=1 then         //檢測移出的位,如果為1,那么與多項式異或
      crc:=crc xor GENP;
      crc:=crc and $FFFF;
  end;
end;
begin
  crc:=$FFFF;             //將余數設定為FFFF
  for i:=AStart to AEnd do   //對每一個字節進行校驗
    CalOneByte(AData[i]);
  s:=inttohex(crc,2);
  Result:= rightstr(s,2)+leftstr(s,2);
end;

 

轉換函數


function TForm1.strtocrc(s: string): string;
var
  buf1:array[0..256] of byte;
  i:integer;
  strOrder:string;
  Res: string;
begin
  strOrder :=StringReplace(s,' ','',[rfReplaceAll]);
  for i:=0 to (length(strOrder) div 2-1) do
    buf1[i]:= HexToInt1(copy(strOrder, i*2 + 1,2));
  result:=s+CalCRC16(buf1,Low(buf1),length(strOrder) div 2-1);
end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM