转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
CRC8算法DELPHI源码         ★★★★

CRC8算法DELPHI源码

作者:闵涛 文章来源:闵涛的学习笔记 点击数:742 更新时间:2009/4/23 18:25:55

  最近做个程序需要用到CRC8校验,网上找了一堆资料都看得头晕脑胀的,最终还是搞不懂它的算法,惭愧。最后找了个C源码请高手翻译成DELPHI的才解决问题。在这感谢 老鸨。。他写的DELPHI程序如下:

unit Crc8;

interface

Uses
  Classes, Windows;

Function Crc_8n(p : array of BYTE; len : BYTE) : Byte;

implementation

Function Crc_8n(p : array of BYTE; len : BYTE) : Byte;
Var
  j, cbit, aout, crc, crc_a, crc_b : Byte;
  i : integer;
begin
  crc := 0;
  i := 0;

  // 取移位的位
  repeat
   crc_a := p[i];
    inc(i);
   j := 8;
   cbit := 1;
    repeat
      crc_b := crc_a;
     crc_b := crc_b xor crc; // ?????
     aout := crc_b and cbit;
     if aout<>0 then begin
        crc := crc xor $18; // ?????
        crc := crc shr 1;
        crc := crc or $80;
     end else begin
       crc := crc shr 1;
     end;
     crc_a := crc_a shr 1;
      dec(j);
    until j = 0;
    dec(len);
  until len = 0;

  result := crc;
end;

end.

 

=================================

 

unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
  Crc8;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const MinBase = 2;
      MaxBase = 36;
     
function StrToNum (const s: string; base: Integer;
                   neg: Boolean; max: Integer): Integer;
// s = 要转换的字符串
// base = 进制数
// neg = 是否为负数

// max = 要转换的最大数//
// 用法:
// i:= StrToNum (''''''''00101101'''''''', 2, false, MaxInt);
// i:= StrToNum (''''''''002D'''''''', 16, false, MaxInt);
// i:= StrToNum (''''''''-45'''''''', 10, true, MaxInt);
// i:= StrToNum (''''''''ZZ'''''''', 36, true, MaxInt);
//
var negate, done: Boolean;
    i, len, digit, mmb: Integer;
    c: Char;
    mdb, res: Integer;
begin
res:= 0;  i:= 1;  digit:= 0;
if (base >= MinBase) and (base <= MaxBase) then begin
  mmb:= max mod base;
  mdb:= max div base;
  len:= Length (s);
  negate:= False;
  while (i <= len) and (s[i] = '''' '''') do Inc (i);
  if neg then begin
   case s[i] of
    ''''+'''': Inc (i);
    ''''-'''': begin  Inc (i);  negate:= TRUE; end;
   end; (* CASE *)
  end; (* IF neg *)
  done:= len > i;
  while (i <= len) and done do begin
   c:= Upcase (s[i]);
   case c of
    ''''0''''..''''9'''': digit:= ORD(c) - 48;
    ''''A''''..''''Z'''': digit:= ORD(c) - 55;
    else      done:= FALSE
   end; (* CASE *)
   done:= done and (digit < base);
   if done then begin
    done:= (res < mdb) or ((res = mdb) and (digit <= mmb));
    IF done then begin
     res:= res * base + digit;
     Inc (i);
    end; (* IF done *)
   end; (* IF done *)
  end; (* WHILE *)
  if negate then res:= - res;
end; (* IF done *)
Result:= res;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
  S : String;
  P : Array[0..255] of Byte;
  Len : Byte;
  R : Byte;
  I : Integer;
begin
  S := Edit1.Text;

  if length(s) mod 2 = 1 then s := s + ''''0'''';

  Memo1.Lines.Add(S + '''' :'''');
  for i:=1 to length(s) div 2 do begin
    p[i-1] := BYTE(StrToNum(copy(s, (i-1)*2+1, 2), 16, false, 500));
    Memo1.Lines.Add(IntToStr(I) + '''' --> '''' + IntToHex(p[i-1], 2));
  end;

  Len := length(s) div 2;

  R := Crc_8n(P, Len);
  Memo1.Lines.Add(''''Crc8 Result: '''' + IntToHex(R, 2));
end;

end.


[系统软件]InstallShield Express for delphi制作安装程序定…  [常用软件]InstallShield Express制作Delphi数据库安装程序
[Delphi程序]为什么选择Delphi.Net ?  [Delphi程序]《关于VisiBroker For Delphi的使用》(4)
[Delphi程序]Delphi 程序员代码编写标准指南  [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro…
[Delphi程序]Borland Delphi 9 的新特性  [Delphi程序]Delphi 键盘码表
[Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗?  [Delphi程序]Delphi Access violations 问题的解决之道
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台