Ich habe heute mal ein kleines Projekt von 32 Bit nach 64 Bit angepasst und dabei ist mir aufgefallen, dass ich unter 64 Bit beim CRC32Fingerprint() zum Teil ein anderes Ergebnis bekomme wie unter 32 Bit weshalb meine vergleiche ob der CRC stimmt nicht mehr funktionierten. Da ich mich jetzt damit nicht ganz so gut auskenne, wollte ich jetzt mal wissen ob das einen bestimmten Grund hat, dass ich unter 64 Bit was anderes zurück bekomme wie unter 32 Bit. Ich dachte ein CRC32 ist immer 32 Bit also 4 Byte und damit ein Long wieso konvertieren dann Debug und die direkte Übergabe an einen Quad das nicht genauso wie wenn ich einen Long zum Quad mache?
*Buffer = AllocateMemory(1000)
If *Buffer
PokeS(*Buffer, "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.")
Length = MemoryStringLength(*Buffer)
CRC1.l = CRC32Fingerprint(*Buffer, Length)
Debug CRC1 ;-1696003417
CRC2.q = CRC1
Debug CRC2 ;-1696003417
CRC3.q = CRC32Fingerprint(*Buffer, Length)
Debug CRC3 ;2598963879
Debug CRC32Fingerprint(*Buffer, Length) ;2598963879
If CRC1=CRC32Fingerprint(*Buffer, Length)
Debug "OK"
EndIf
FreeMemory(*Buffer)
EndIf
mfg Christian+
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Eigentlich ein seltsames verhalten wenn PureBasic das Vorzeichen beim konvertieren von Long zu Quad beachtet aber nicht wenn ich einen Variable von Typ Long mit dem Rückgabewert von CRC32Fingerprint vergleiche. Werde ich den Rückgabewert eben immer erst zwischenspeichern in einer Varibale vom Typ Long dann ist das Problem gelöst.
mfg Christian+
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Christian+ hat geschrieben:Werde ich den Rückgabewert eben immer erst zwischenspeichern in einer Varibale vom Typ Long dann ist das Problem gelöst.
Das ist nach dem was ich im Laufe der Zeit hier im Forum gelesen habe sowieso immer die sicherste Variante bei PureBasic. Z.B. auch beim Rückgabewert einer Prozedur: Es kann passieren dass