Sim*_*aWB 2 delphi crc delphi-2010
我在Delphi 5和2010中使用了相同的函数(OneWayEncrypt(edit1.Text)).
为什么结果不同?(或者我如何从Delphi 2010中获得相同的结果?)
uses Sysutils, Windows, Dialogs, classes;
function OneWayEncrypt(AStr: string): string;
PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
implementation
const
table: ARRAY[0..255] OF DWORD =
(
//table consts are here
);
PROCEDURE CalcCRC32(p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
VAR
i: DWORD;
q: ^Byte;
BEGIN
q := p;
FOR i := 0 TO ByteCount - 1 DO
BEGIN
CRCvalue := (CRCvalue SHR 8) XOR table[q^ XOR (CRCvalue AND $000000FF)];
INC(q);
END
END;
function OneWayEncrypt(AStr: string): string;
var
dwCrc: DWORD;
s: string;
begin
dwCrc := $FFFFFFFF;
s := 'X' + AStr + '7F';
CalcCRC32(Addr(s[1]), Length(s), dwCrc);
result := IntToHex(dwCrc, 8);
end;
Run Code Online (Sandbox Code Playgroud)
Leo*_*Leo 10
您是否知道string
在D2010 中引用了一个Unicode字符串,而它在版本<D2009中引用了AnsiString?那应该是你问题的根源.
所以你有两个选择:
string
用AnsiString
.这应该会给你与D5相同的结果,当然没有Unicode支持