⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc32dem.pas

📁 crc校验算法
💻 PAS
字号:
{$IFDEF WIN32}
{$APPTYPE CONSOLE}
{$ENDIF}

{Compile from command line:

   DCC   CRC32Dem         (Delphi 1)
or
   DCC32 CRC32Dem         (Delphi 2/3/4/5)
}

PROGRAM CRC32Demo;

 {CRC32Demo demonstrates the use of the CRC32 UNIT.
  Modified from CRC16Demo.

  (C) Copyright 1989, 1996, 1999, Earl F. Glynn, Overland Park, KS.
  All Rights Reserved.}

  USES
{$IFNDEF WIN32}
    WinCRT,    {Delphi 1 only}
{$ENDIF}
    Windows,   // DWORD
    CRC32,     {CalcCRC32, CalcFileCRC32}
    SysUtils;  {IntToHex, pByteArray}

  CONST
    BufferSize = 16384;
    nElements  = 4;
    x:  ARRAY[1..nElements] OF DOUBLE = (1.0,2.5,6.02E23, 7.0);

    CRCinit:  DWORD = $FFFFFFFF;


  VAR
    b         :  BYTE;
    CRCvalue  :  DWORD;
    error     :  WORD;
    s         :  STRING;
    TotalBytes:  TInteger8;

  PROCEDURE FileChk (f:  STRING);
  BEGIN {FileChk}
    CalcFileCRC32 (f, CRCvalue,TotalBytes, error);

    IF   error = 0
    THEN WRITELN (IntToHex(CRCvalue,8),
                 FormatFloat('#########0', TotalBytes):10,'  ', f)
    ELSE BEGIN
      WRITE (' ':20, f);
      CASE error OF
        2:   WRITELN ('  <File not found>');
        3:   WRITELN ('  <Path not found>');
        5:   WRITELN ('  <File access denied>');
        ELSE WRITELN ('  <other error>', error)
      END
    END

  END {FileChk};


BEGIN {CRC32Demo}

  b := $AC;              {See "A Tutorial on CRC Computations", IEEE Micro,}
  CRCvalue := CRCinit;   {August 1988, p. 64, example calculation for bit  }
                         {string 101011 has CRC-16 value of $7D00 = 32000  }
  CalcCRC32 (Addr(b),1,CRCvalue);
  WRITELN ('CRC-32 code of bit string 101011 is ', IntToHex(CRCvalue,8));

  s := 'This is a sample string';
  CRCvalue := CRCinit;
  CalcCRC32 (Addr(s[1]), LENGTH(s), CRCvalue);  {exclude length byte}
  CRCvalue := NOT CRCvalue;
  WRITELN ('CRC-32 code of ''',s,''' is ', IntToHex(CRCvalue,8));

  Delete (s,11,7);
  CRCvalue := CRCinit;
  CalcCRC32 (Addr(s[1]), LENGTH(s), CRCvalue);  {exclude length byte}
  CRCvalue := NOT CRCvalue;
  WRITELN ('CRC-32 code of ''',s,''' is ', IntToHex(CRCvalue,8));

  CRCvalue := CRCinit;
  CalcCRC32 (Addr(x), nElements*SizeOf(x[1]), CRCvalue);
  CRCvalue := NOT CRCvalue;
  WRITELN ('CRC-32 code of real array 1 is ', IntToHex(CRCvalue,8));

  x[2] := 0.0; x[3] := 9.11E-31;
  CRCvalue := CRCinit;
  CalcCRC32 (Addr(x), nElements*SizeOf(x[1]), CRCvalue);
  CRCvalue := NOT CRCvalue;
  WRITELN ('CRC-32 code of real array 2 is ', IntToHex(CRCvalue,8));

  x[1] := 0.0; x[2] := 0.0; x[3] := 0.0; x[4] := 0.0;
  CRCvalue := CRCinit;
  CalcCRC32 (Addr(x), nElements*SizeOf(x[1]), CRCvalue);
  CRCvalue := NOT CRCvalue;
  WRITELN ('CRC-32 code of real array 3 is ', IntToHex(CRCvalue,8));


  WRITELN;
  WRITELN ('File CRC-32 Codes:');
  WRITELN;
  WRITELN (' CRC-32     Bytes        F i l e n a m e');
  WRITELN ('--------  --------  ------------------------');

  FileChk ('test.dat');
  FileChk ('C:\COMMAND.COM');
  FileChk ('C:\MSDOS.SYS');
  FileChk ('C:\IO.SYS');
  FileChk ('C:\WINP\PROJ\DDS\CLAIMMAN.EXE');
  FileChk ('abcLower.TXT');
  FileChk ('ABCUpper.TXT');
  FileChk ('ThisIsAString.TXT');
  FileChk (ParamStr(0));
  FileChk ('D:\EXISTS.NOT');
  FileChk ('C:\DOS');
  FileChk ('()[]{}.,/?*&$');

END {CRC32Demo}.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -