首页
社区
课程
招聘
大家帮我看看,我用DELPHI写的获取CRC的256个基数怎么不正确呢
发表于: 2007-12-27 13:38 5071

大家帮我看看,我用DELPHI写的获取CRC的256个基数怎么不正确呢

2007-12-27 13:38
5071
procedure TForm1.Button1Click(Sender: TObject);
VAR
  i,j,crc:integer;
  crc32tbl:array[0..255] of dword;
begin
  for i:=0 to 255 do begin
    crc:=i;
    for j:=0 to 7 do begin
      if (crc and 1)=1 then begin
        crc:=(crc shl 1) xor $EDB88320;
      end else begin
        crc:=crc shl 1;
      end;
    end;
    crc32tbl[i]:=crc;
  end;
  for i:=0 to 255 do begin
    memo1.Lines.add(format('%x',[crc32tbl[i]]));
  end;
end;

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
procedure TForm1.Button1Click(Sender: TObject);
VAR
  i,j,crc:integer;
  crc32tbl:array[0..255] of dword;
begin
  for i:=0 to 255 do begin
    crc:=i;
    for j:=0 to 7 do begin
      if (crc and 1)=1 then begin
        crc:=(crc shr 1) xor $EDB88320;  // 将shl改成shr
      end else begin
        crc:=crc shr 1; // 将shl改成shr
      end;
    end;
    crc32tbl[i]:=crc;
  end;
  for i:=0 to 255 do begin
    memo1.Lines.add(format('%x',[crc32tbl[i]]));
  end;
end;
2007-12-27 16:03
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢,在网上搜到答案了
这个也是不对的
  if (crc and 1)=1 then begin  //此处不能是=1 而应该是<>0
        crc:=(crc shr 1) xor $EDB88320;  // 将shl改成shr
      end else begin
        crc:=crc shr 1; // 将shl改成shr
      end;
2007-12-27 17:22
0
雪    币: 243
活跃值: (179)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=wping;396517]procedure TForm1.Button1Click(Sender: TObject);
VAR
  i,j,crc:integer;
  crc32tbl:array[0..255] of dword;
begin
  for i:=0 to 255 do begin
    c...[/QUOTE]
void MakeTable()//动态生成CRC32的码表
{
    int i,j;
    unsigned long crc;
    for (i = 0; i < 256; i++) {
        crc = i;
        for (j = 0; j < 8; j++) {
            if (crc & 1)
                crc = (crc >> 1) ^ 0xEDB88320;
            else
                crc >>= 1;
        }
        Crc32Table[i] = crc;
    }
}
2007-12-27 19:14
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上的代码堪称经典,呵呵
我就是比照这个用D7写的
2007-12-27 19:41
0
雪    币: 3758
活跃值: (3282)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
6
Delphi 就用Peter J的单元吧, 速度非常不错.
procedure MakeCRC32Table;
// Polynom-Definition:
// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0
// 1 0000 0100 1100 0001 0001 1101 1011 0111 = $04C11DB7
// Polynom-Definition revers:
// 1110 1101 1011 1000 1000 0011 0010 0000 1 = $EDB88320
const
  cPolynom = $EDB88320;
var
  i, k: Integer;
  v: DWORD;
begin
  GetMem(xCRC32Table, SizeOf(TCRC32Table));
  for i := 0 to 255 do begin
    v := i;
    for k := 0 to 7 do begin
      if (v and $01)<>0 then
        v := cPolynom xor (v shr 1)
      else
        v := v shr 1;
    end;
    xCRC32Table^[i] := v;
  end;
end;
2007-12-31 17:21
0
游客
登录 | 注册 方可回帖
返回
//