`
sbabzc
  • 浏览: 38928 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

对文件、字符串进行 CRC 校验

crc 
阅读更多
{*------------------------------------------------
  CRC 校验
  @author xszlo
  @version P72
  @todo 1
  @History,2010-7-16,1
--------------------------------------------------*}

unit uCRC;
 
interface
 
uses
  Windows, SysUtils;
  
type
  TCRC = class(TObject)
  private
    Table: array[0..255] of DWORD;
    procedure MakeTable();
  public
    procedure GetCRC32File(FileName: string; var CRC32: DWORD);
    function GetCrc32Str(s: string; Seed: LongInt): string;
    function GetCRC32FileHexStr(FileName: string): string;
  end;
 
implementation
 
{ TCRC }
 
{-------------------------------------------------------------------------------
  过程名:    TCRC.GetCRC32File
  作者:      xszlo
  日期:      2008.12.09
  参数:      FileName: string; var CRC32: DWORD
  返回值:    无
  作用:     生成文件的CRC32验证码
-------------------------------------------------------------------------------}
procedure TCRC.GetCRC32File(FileName: string; var CRC32: DWORD);
var
  F: file;
  BytesRead: DWORD;
  Buffer: array[1..65521] of Byte;
  i: Word;
begin
  MakeTable;
  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;
 
{-------------------------------------------------------------------------------
  过程名:    TCRC.GetCRC32FileHexStr
  作者:      xszlo
  日期:      2008.12.09
  参数:      FileName: string
  返回值:    string
  作用:     得到文件的RCR32验证码
-------------------------------------------------------------------------------}
function TCRC.GetCRC32FileHexStr(FileName: string): string;
var
  dcrc32: DWORD;
begin
  GetCRC32File(FileName, dcrc32);
  if dcrc32 <> 0 then
    result := PChar(IntToHex(dcrc32, 6));
end;
 
{*------------------------------------------------------------------------------
  生成字符CRC验证
  @param 
   s string  
   Seed Integer  
  @throws 无
  @return  string
------------------------------------------------------------------------------*}
function TCRC.GetCrc32Str(s: string; Seed: Integer): string;
var
  Count: Integer;
  CrcVal: LongInt;
begin
  MakeTable();
  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;
 
{-------------------------------------------------------------------------------
  过程名:    TCRC.MakeTable
  作者:      xszlo
  日期:      2008.12.09
  参数:      无
  返回值:    无
  作用:     无
-------------------------------------------------------------------------------}
procedure TCRC.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;
 
end.


------------
使用方法:
var
  CRC:TCRC;

  CRC:=TCRC.Create;
  showmessage(CRC.GetCRC32FileHexStr('d:\a.txt'));
  FreeAndNil(CRC);

本文地址:http://www.xszlo.com/article/2012-12-13/7628.html,转发请保留这个地址,谢谢
分享到:
评论

相关推荐

    嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus通信之CRC校验_CRC计算.pdf

    嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus通信之CRC校验_CRC计算.pdf嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus通信之CRC校验_CRC计算.pdf嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus...

    文件、字符串进行CRC32校验的DLL源码

    在这个"文件、字符串进行CRC32校验的DLL源码"中,我们可以看到两个关键函数:GetCharCRC和GetFileCRC,分别用于处理字符串和文件的CRC32计算。 1. **CRC32原理**: - CRC32基于多项式除法的概念,通过对数据进行...

    串口CRC校验程序串口测试程序范例源代码

    CRC16是CRC校验的一种,它通过生成一个16位的校验码与数据进行异或运算,然后通过特定的CRC多项式进行除法运算,最终得到的余数就是CRC值。这个16位的CRC值会被附加到原始数据的末尾,接收端会使用同样的算法对收到...

    java实现CRC16校验功能

    1. `int calculateCRC16(byte[] data)`:此方法接收一个字节数组作为输入,对这些字节进行CRC16计算,并返回16位的CRC校验和。 2. `boolean verifyCRC16(byte[] originalData, byte[] receivedData)`:此方法用于...

    串口实现编码数据的收发,带CRC校验,求和校验和奇偶校验

    本文将深入探讨如何通过串口实现编码数据的收发,并结合CRC校验、求和校验和奇偶校验来确保数据的准确无误。 首先,串口(Serial Port)是一种物理接口,用于设备之间的串行通信。它允许数据逐位地发送和接收,通常...

    一个crc-16校验的小程序

    3. **16进制转字符串**:计算出的CRC校验码也是16进制数,通常以字符串形式呈现给用户。这意味着需要将16位的二进制数转换回16进制字符串。这个过程包括将二进制数分割成4位一组,然后将每组转换为相应的16进制字符...

    CRC校验码计算器(包含8位16位32位)

    CRC,即循环冗余校验...用户运行这个程序,可以方便地对各种数据进行CRC校验,无论是简单的文本字符串还是大文件,都能通过这个工具快速计算出对应的8位、16位或32位CRC值,确保数据在传输和存储过程中的正确性。

    C#语言编写的CRC校验DLL(源码)

    例如,使用位操作代替字符串操作,或者使用缓存策略减少重复计算。 7. **单元测试**:为了确保CRC校验功能的正确性,源代码可能包含单元测试用例,用于验证不同输入数据下的校验结果是否符合预期。 通过学习和理解...

    Qt 软件 CRC校验

    1. **QByteArray与二进制数据**:QByteArray是Qt提供的一种灵活的数据类型,可以方便地处理ASCII字符串和二进制数据。在进行CRC校验时,首先需要将原始数据转换为QByteArray。 2. **CRC算法的选择**:存在多种CRC...

    Labview CRC校验生成,支持多种格式输出。十六进制字符串

    通过这个LabVIEW CRC校验生成的项目,开发者能够高效地集成CRC校验功能到自己的应用中,无论数据是十进制字符还是十六进制字符串,都能轻松应对。这对于确保数据的准确性和可靠性至关重要,特别是在数据通信和存储...

    校验文件或字符MD5,CRC32码的COM组件给ASP使用

    校验文件和字符的MD5,CRC32码的COM组件,可以用ASP,PHP等调用。 网上找了很久都没有完整的,自己动手将收集的资料编译了一个DLL。... Response.Write (ASPObj.CStrToCRC32("字符串", 0)) '校验字符串的CRC32 %&gt;

    JavaCRC校验

    生成多项式的选取对CRC校验的有效性至关重要,通常选择的是具有较好错误检测能力的多项式。 #### 三、Java中的CRC校验实现 在Java中实现CRC校验,可以采用自定义算法的方式,如上文给出的`CRC16Checker`类所示。...

    CRC16 MODBUS校验算法实现

    在CRCStrTest.java文件中,可能包含了一个实现,将字符串转换成字节数组,然后进行CRC16计算。首先,字符串被编码为字节序列(通常使用ASCII或UTF-8),然后对每个字节执行CRC16算法。每个字节都会与当前CRC值异或,...

    C#写的CRC校验程序

    下面将详细介绍CRC校验的基本原理、C#实现CRC校验的方法以及如何利用提供的文件进行CRC校验。 CRC校验是通过一种特定的数学算法来生成一个固定长度的校验码,这个校验码与原始数据关联,并用于检测数据在传输或存储...

    给任意长度的字符串,加CRC校验码的c语言算法.rar

    CRC(Cyclic Redundancy Check,循环冗余校验)...通过上述的C语言代码,我们可以给任意长度的字符串添加CRC校验码,以提高数据传输的可靠性。在实际项目中,CRC校验码通常会附加到数据的末尾,以便在接收端进行验证。

    Labview实现串口通信与CRC校验并解析缓冲区数据

    例如,你可以使用字符串函数将接收到的二进制数据转换成可读的ASCII字符串,或者使用结构化数据解析工具处理Modbus协议中的寄存器和线圈值。对于Modbus 485协议,解析缓冲区数据意味着解码功能码、提取寄存器值并...

    hex文件解析,校验码校验

    在这些文件中,可能包含了处理Hex文件和进行校验码校验的函数或类定义。 在实际应用中,解析Hex文件并进行校验码校验可能涉及到以下步骤: 1. **创建解析器类**:定义一个类来处理Hex文件的读取和转换。 2. **实现...

    QT下实现和演示CRC校验的小程序

    在CRC实现中,我们可能需要用到QByteArray的fromHex()和toHex()方法来处理十六进制字符串和二进制数据之间的转换。 在程序中,我们可以创建一个CRC类,包含计算CRC的方法。这个方法可能接受一个QByteArray作为输入...

    C#写的CRC16校验算法

    1. **CRC16原理**:CRC16的基本工作原理是将数据看作二进制串,然后除以一个预定义的CRC16多项式,得到的余数就是CRC校验码。这个多项式通常是一个16位的二进制数,例如X^16 + X^15 + X^2 + 1,对应的十进制表示为...

    史上最强的CheckSum CRC校验工具

    此CRC校验工具支持:CRC3、CRC4、CRC5、CRC6、CRC7、CRC8、CRC11、CRC12、CRC13、CRC14、CRC15、CRC16、CRC...支持计算的数据:16进制HEX、字符串、文件,字符串支持ANSI、UTF8、Unicode、Unicode BigEndian编码方式。

Global site tag (gtag.js) - Google Analytics