CRC32生成码表方法实现

2016-02-19 19:59 15 1 收藏

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

【 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/bianchengyuyan/)

来源:http://www.tulaoshi.com/n/20160219/1622446.html

延伸阅读
标签: PS
利用PS动作一秒生成逼真刺绣效果   利用PS动作一秒生成逼真刺绣效果,效果蛮逼真,值得(www.tulaoshi.com)借鉴学习
标签: 电脑入门
我以前一直使用的是PPT 2003,后来因为工作需要升级为了PPT 2010,升级后一直用得挺顺的,比较满意!但是最近我碰到了一个难题,不知道怎么分离PPT 2010的背景音乐。以前,我是通过另存为的方式搞定的,这种方法在PPT 2010失效了,怎么办? 解答:PPT 2010跟PPT 2003区别较大,你用以前的老方法当然行不通啦。不过,从分离PPT的背景音乐这个角...
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。 代码如下: package com.cn.str; import java.util.UUID; /**  * Create GUID  * @author Administrator  *  */ ...
标签: PHP
    by coldwind/iwind/month/ccterran http://iwind.org    有很长一段时间我到处问别人怎么实现静态网页,还向唠叨提过问题,而如今,我终于想出了一个很简单的办法,那就是用libtemplate来实现它。   大家看:http://doc.iwind.org   下面我就如何实现静态网页输出谈一谈。   ...
标签: Web开发
用js生成任意圆角,下一步就是加入直角导角,圆角导外,外圆角导个,还有边框处理,阴影生成,还有柔化处理都是以后的重点和难点. 中工工基 人遥仍失遥士大夫工士大夫花样百出地苛夺花样百出地人测试有的我不想信工大师傅苛夺工士大夫花样百出地模压 械夺棋栽夺苛夺棋地花样百出地模压械夺棋栽夺中工工基 人遥仍失遥士大夫工士大夫花样百出地苛夺花...

经验教程

350

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部