我需要将Python代码转换为 Delphi ,但我不能。
Python代码是:
def crc32(data: bytes, initial):
crc = initial
for x in data:
for k in range(8):
if ((crc ^ x) & 0x01) == 1:
crc = crc >> 1
crc = crc ^ 0x04c11db7
else:
crc = crc >> 1
x = x >> 1
crc &= 0xffffffff
return crc
但是当我翻译成 Delphi 代码时,我遇到了一个问题,问题是x = x >> 1
行
这是 Delphi 代码:
function TForm1.CalculateCRC32(const data: TBytes; initial: Cardinal): Cardinal;
var
crc: Cardinal;
x, z: Integer;
begin
crc := initial;
for x in data do
begin
for z := 0 to 7 do
begin
if ((crc xor x) and $01) = 1 then
begin
crc := crc shr 1;
crc := crc xor $04c11db7;
end
else
begin
crc := crc shr 1;
end;
x := x shr 1; // here its the problem I have
end;
end;
crc := crc and $ffffffff;
Result := crc;
end;
我该怎么解决这个问题呢?先谢了。
我用的是 Delphi XE11.3
做一个测试,我做:
data := '123456780000000077000000';
bytedata := HexToBytes(data); //TBytes type
initDataStr := '$FFFFFFFF';
initData := Cardinal(StrToInt64(initDataStr));
result := CalculateCRC32(bytedata, initData); //The result should be 7085D2 in hexadecimal.
1条答案
按热度按时间vaj7vani1#
你可以试试这样
我只是通过使用z变量来调节逐位操作,以避免更改循环变量x,从而确保循环按预期运行。