Seite 1 von 1

[SOLVED] Ergebnis von CRC32FingerPrint <> FingerPrint ?

Verfasst: 30.09.2015 14:20
von DK5UR
Ich würde erwarten das die Ergebnisse beider Funktionen gleich sind.
Bei mir ist dem aber nicht so, was ziemlich misslich ist :shock:

Code: Alles auswählen

FF = ReadFile(#PB_Any, #PB_Compiler_Home+"Examples\3D\Data\Textures\RustySteel.jpg")
If FF
  size = Lof(FF)
  If size > 0
    *mem = AllocateMemory(size)
  EndIf
  If *mem
    ReadData(FF, *mem, size)
    CompilerIf #PB_Compiler_Version >= 540
      UseCRC32Fingerprint()
      Debug Val("$"+Fingerprint(*mem, size,#PB_Cipher_CRC32))   ; Result for 5.40b8 32/64bit : 2524904063
    CompilerElse
      Debug CRC32Fingerprint(*mem, size)                        ; Result for 5.31 32/64bit   : -1770063233
    CompilerEndIf
    FreeMemory(*mem)
  EndIf
  CloseFile(FF)
EndIf
Kann das jemand bestätigen, oder ist das ein lokales Problem?

Heinz

OS: Win10 (64)

Re: Ergebnis von CRC32FingerPrint <> FingerPrint ?

Verfasst: 30.09.2015 15:02
von NicTheQuick
Das sind die selben Zahlen, bloß dass die zweite negativ interpretiert wird, weil es ein Long ist:

Code: Alles auswählen

; 32-Bit Wert in Integer gespeichert
i.i = $967efa7f
Debug i

; 32-Bit Wert in Long gespeichert
l.l = $967efa7f
Debug l

; Signed Long zu Integer casten
lu.i = l & $ffffffff
Debug lu
Denke auch daran, dass einmal die "RustySteel.jpg" vom einen und einmal vom anderen Compiler genommen wird. In diesem Fall sind sie aber identisch, d.h. daran liegt es nicht.

Das Kommandozeilentool unter Linux bestätigt das auch:

Code: Alles auswählen

nicolas@tp-w530:~$ crc32 programme/purebasic{,_5.31}/examples/3d/Data/Textures/RustySteel.jpg
967efa7f	programme/purebasic/examples/3d/Data/Textures/RustySteel.jpg
967efa7f	programme/purebasic_5.31/examples/3d/Data/Textures/RustySteel.jpg

Re: Ergebnis von CRC32FingerPrint <> FingerPrint ?

Verfasst: 30.09.2015 15:36
von DK5UR
Danke für Erklärung.

Ich wußte doch, es ist ein lokales Problem zwischen den Ohren :roll: