求5566的CRC校验码时多出一个问号BECA?代码如下:
function mjComCRC(buf: PByte;len: Integer): Word;
var
i,j: Integer;
chr: Word;
begin
Result := $ffff;
for j:=0 to len-1 do begin
chr := PByte(LongWord(buf)+j)^ and $ff;
Result := Result xor chr;
for i:=0 to 8 -1 do begin
if ((Result and 01)<>0) then
Result := (Result shr 1) xor $a001
else
Result := Result shr 1;
end;
Result := Result and $ffff;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str,Str1: String;
Ret: Word;
mybyte:pchar;
i: Integer;
begin
Str1 := Edit1.Text; //假定你用Edit1输入
SetLength(Str,Length(Str1));
i := HexToBin(PChar(str1),PChar(Str),Length(Str1));
SetLength(Str,i);
Ret := mjComCRC(pbyte(Str),i);
GetMem(mybyte,sizeof(Ret) * 2);
BinToHex(PChar(@Ret),PChar(mybyte),sizeof(ret));
//ShowMessage(mybyte);
label1.Caption:=edit1.Text+' '+mybyte;
edit2.Text:=edit1.Text+' '+mybyte;
end;end.
function mjComCRC(buf: PByte;len: Integer): Word;
var
i,j: Integer;
chr: Word;
begin
Result := $ffff;
for j:=0 to len-1 do begin
chr := PByte(LongWord(buf)+j)^ and $ff;
Result := Result xor chr;
for i:=0 to 8 -1 do begin
if ((Result and 01)<>0) then
Result := (Result shr 1) xor $a001
else
Result := Result shr 1;
end;
Result := Result and $ffff;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str,Str1: String;
Ret: Word;
mybyte:pchar;
i: Integer;
begin
Str1 := Edit1.Text; //假定你用Edit1输入
SetLength(Str,Length(Str1));
i := HexToBin(PChar(str1),PChar(Str),Length(Str1));
SetLength(Str,i);
Ret := mjComCRC(pbyte(Str),i);
GetMem(mybyte,sizeof(Ret) * 2);
BinToHex(PChar(@Ret),PChar(mybyte),sizeof(ret));
//ShowMessage(mybyte);
label1.Caption:=edit1.Text+' '+mybyte;
edit2.Text:=edit1.Text+' '+mybyte;
end;end.
解决方案 »
- Object Pascal是独立的开发工具吗?
- 写了个钩子,用的是记录钩子。但是在有的机器上会死机,非得按一下ctrl+alt+del才能恢复
- 高人进来帮我下,看看这段代码到底哪里错误,这个循环第一次循环可以,第二次不行!
- 有没有昆明的朋友:昆明理工大学 或 云南大学 的足球场对外开放吗?
- cxgrid如何去掉DRAW A COLUMN 。。。那个标题栏?
- 如何备份access数据库呢?
- 如何判断一个文件夹是否存在
- 请教大家一道书本中的练习题.
- 一个控件的用法!来帮看看!
- 公司想做一个图书管理系统作为产品,请各位给点意见
- 再来捧场,发一个线程基类的源代码,嘿嘿
- 想问下下面的这段代码为什么[能够登陆成功]
Ret := mjComCRC(pbyte(Str),i);
GetMem(mybyte,sizeof(Ret) * 2 + 1);
ZeroMemory(mybyte, sizeof(Ret) * 2 + 1);
BinToHex(PChar(@Ret),PChar(mybyte),sizeof(ret));