{*------------------------------------------------
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...
根据文件、字符串生成相应的校验码。GetCharCRC为字符串TOCRC,GetFileCRC为文件TOCRC。另外本源码适用于广东的粤通卡加密
串口CRC校验程序串口测试程序范例源代码,里面包括有VB的,delphi和VC++的源程序,
java实现CRC16校验功能~ 测试下载,直接运行即可!用的好的给个好评~
Labview2014实现串口通信,并对输入的字符串进行CRC校验,可直接用于测试modbus485协议,并且程序对串口缓冲区数据进行了解析。
此CRC校验工具支持:CRC3、CRC4、CRC5、CRC6、CRC7、CRC8、CRC11、CRC12、CRC13、CRC14、CRC15、CRC16、CRC...支持计算的数据:16进制HEX、字符串、文件,字符串支持ANSI、UTF8、Unicode、Unicode BigEndian编码方式。
校验文件和字符的MD5,CRC32码的COM组件,可以用ASP,PHP等调用。 网上找了很久都没有完整的,自己动手将收集的资料编译了一个DLL。... Response.Write (ASPObj.CStrToCRC32("字符串", 0)) '校验字符串的CRC32 %>
一个crc 16校验的小程序, 输入要校验的16进制数, 即可显示校验结果. 其中涉及字符串转16进制以及16进制转字符串的实现
CRC16\crc16-modbus QT实现,直接调用类中函数即可:计算crc 校验码。2)crc_Checking(...):将有crc...3)crcCalculation(...):将字符串传入该函数,自动计算出crc校验码并且添加到报文之后,返回携带crc校验码的新报文
发送端通过液晶触摸屏输入字符,然后编写协议发送,采用4.3寸液晶 接收端将接收到的数据解码,然后将有效字符显示在液晶上,采用2.8寸液晶 接收无误码,使用于各种数字无线收发的应用
CRC16(Modbus)校验类,QT实现,直接调用类中函数即可(注意命名空间),三个函数表示,1)crc16(....3)crcCalculation(...):将字符串传入该函数,自动计算出crc校验码并且添加到报文之后,返回携带crc校验码的新报文。
代码是QT 下的 CRC16(Modbus)校验类,拿过去直接调用类中函数即可(注意命名空间),crc16(...):...crcCalculation(...):将字符串传入该函数,自动计算出crc校验码并且添加到报文之后,返回携带crc校验码的新报文。
CommCheckSum校验工具是一款通用的循环冗余校验码CRC(Cyclic Redundancy Check)、MD5、SHA1、SHA2、SHA3、...支持计算的数据:16进制HEX、字符串、文件,字符串支持ANSI、UTF8、Unicode、Unicode BigEndian编码方式。
4、CRC校验小工具。 5、十六进制通信协议提取部分位并根据自定义数据类型转化为十进制 6、字符格式示波器,例:">P:-1.25",示波器显示曲线名称P,数值-1.25,曲线个数最多8个。 7、类似MODBUS协议截取第2-5位,合成...
附件是CRC16 MODBUS校验算法实现 分两种情况: 1、参数是字符串,见附件中CRCStrTest.java文件 2、参数是字节数组,见附件中CRCByteTest.java文件
C#写的CRC16校验算法,分为CRC16和ModbusCRC16两种,使用方法请参考Demo
给任意长度的字符串,加CRC校验码的c语言算法.rar
含有中文说明的完整的CRC16校验算法、函数说明:对已经附加了CRC校验码的字符串进行有效性校验
1、程序说明:用于字符串的CRC校验计算,根据规则,对数据进行处理,计算出CRC校验吗 2、语言:java jdk1.8.0_20 3、作者:lining 4、实现功能:对保存在TXT文件中的一组数据进行CRC16校验,输出校验码,并将校验码...
一款CRC16的校验码生成工具,可以自己设置校验码生成多项式,可以对十六进制序列和文件进行校验,得出16位CRC校验码。字符串需要输入ASCii码形式,例如:AE 13 4F 78 0C 90 A0 B1,每两个中间要加空格,当校验多项式...