最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。
【 tulaoshi.com - 编程语言 】
    Table:Array[0..255] of DWORD;
  
  procedure MakeTable();
  var
    i,j,Crc:integer;
  begin
    for i:=0 to 255 do
      begin
        Crc:=i;
        for j:=0 to 7 do
          begin
            if (Crc and 1)0 then
              Crc:=(Crc shr 1) xor $EDB88320
            else
              Crc:=Crc shr 1;
          end;
        Table[i]:=Crc;
      end;
  end; 
  
  procedure GetCRC32File(FileName:string;var CRC32:DWORD);
  var
    F:file;
    BytesRead:DWORD;
    Buffer:array[1..65521] of Byte;
    i:Word;
  begin
    FileMode :=0;
    CRC32 :=$ffffffff;
    {$I-}
    AssignFile(F,FileName);
    Reset(F,1);
    if IoResult = 0 then
      begin
        repeat
        BlockRead(F,Buffer,Sizeof(Buffer),BytesRead);
        for i := 1 to BytesRead do
          CRC32 := (CRC32 shr 8) xor Table[Buffer[i] xor (CRC32 and $000000ff)];
        until BytesRead = 0;
      end;
    CloseFile(F);
    {$I+}
    CRC32 := not CRC32;
  end;
      
  function GetCrc32Str(s: string; Seed: LongInt):string;
  var
    Count: Integer;
    CrcVal: LongInt;
  begin
    CrcVal := Seed;
    for Count := 1 to Length(s) do
      CrcVal := Table[Byte(CrcVal xor DWORD(Ord(s[Count])))] xor ((CrcVal shr 8) and $00FFFFFF);
    Result := IntToHex(not(CrcVal), 8);
  end;
  
  调用:
  procedure TForm1.Button1Click(Sender: TObject);
  begin
    MakeTable();
    Edit1.Text:=GetCrc32Str('11111111',8);//这里取指定字符串的CRC32校验值;
  end;
  
  procedure TForm1.Button2Click(Sender: TObject);
  var
    FileStr:String;
    crc: DWORD;  
  begin
    MakeTable();
    FileStr:=Application.ExeName;//这里取指定的文件的crc32校验值;
    GetCRC32File(FileStr,crc);
    if crc0 then
      Edit2.Text:=PChar(IntToHex(crc,6));
  end;
  
来源:http://www.tulaoshi.com/n/20160219/1622446.html
看过《CRC32生成码表方法实现》的人还看了以下文章 更多>>