Delphi-Quellcode:
For i := 1 To length(Data) do
begin
lCRC32 := (((lCRC32 shr 32) And $FFFFFF) Xor
Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
end;
Dann solltest du dringend mal das VBScript reparieren.
((lCRC32 shr 32) And $FFFFFF)
ist immer 0, denn lCRC32 ist 32 Bit und wenn man da den Inhalt um 32 Bit verschiebt, dann ist es leer, womit ein Großteil des CRCs verloren geht.
Vermute ich zwar weniger, aber scheint hier nahezuliegen, also im Problemfall könnte SHR auf die 32 allergisch reagieren und da eine Verschiebung von 0 machen.
Wie sieht es damit aus?
Delphi-Quellcode:
For i := 1 To length(Data) do
begin
lCRC32 := ((lCRC32 And $FFFFFF) Xor
Crc32Table1[(lCRC32 and $FF) xor Ord(Data[i])]);
end;
[edit]
Das VBS ist Schrott und rechnet falsch.
Das liegt an der fehlerhaften Klammersetzung
Code:
For i = 1 To Len(Data)
lCRC32 = (((lCRC32 And &HFFFFFF00 \ &H100) And &HFFFFFF) Xor _
Crc32Table((lCRC32 And &HFF) Xor AscW(Mid(Data, i, 1))))
Das, was ich schon profezeit hatte. Bei
(lCRC32 And &HFFFFFF00 \ &H100)
wird zuerst / und dann AND aufgelöst.
Also
(lCRC32 And (&HFFFFFF00 \ &H100))
, bzw.
(lCRC32 And &H00FFFFFF)
, statt dem beabsichtigten
((lCRC32 And &HFFFFFF00) \ &H100)
.
Entweder du reparierst die defekte VBS-Funktion oder du solltest diese Funktion umbenennen und im Delphi dann eine "gleich" falsch rechnende Funktion verwenden.