Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#35

AW: VBA Script in Delphi umsetzen

  Alt 4. Dez 2013, 08:46
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Dez 2013 um 08:56 Uhr)
  Mit Zitat antworten Zitat