Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: MD5-Hashwert als 40-stellige Dezimalzahl

  Alt 8. Dez 2021, 14:45
Joar, nativ kannst das in Delphi nunmal dann nur als String umsetzen.
Und "führende Nullen" besagen auch, dass es eine Stringrepresentation sein soll.

StrToInt geht nicht, denn das Ergebnis müsste ein 128-bit-integer sein, ist also viel zu groß.
Es gibt auch StrToInt64, aber da Delphi standardmäßig keinen 128-Bit Typen besitzt und somit auch kein passendes StrToIntXyz, bleibt es hier nunmal hängen.

Man könnte aber z.B. mit einer BigInt-Implementation hier eine Lösung finden, falls man das nicht selber binär in Integer aufteilen will, mit denen man dann arbeiten kann.



Delphi hat im 32-Bit-Compiler (System.pas) sogar Beispielcodes/-funktionen drin,
wo mit zwei Integern der Int64 emuliert wird.

Das kann man mathematisch problemlos auch auf 2xInt64 für einen Int128 umstellen.



Im Prinzip dividiert man erst den oberen Int64 durch 10, speichert darin wieder den Wert,
nimmt den Rest mit in den unteren Int64 und dividiert ebenfalls durch 10 und speichert.
Davon wieder der Rest nimmt man und speichert ihn im String, von rechts nach Links.
Und so bekommt man Stück für Stück den großen Dezimalstring.

Man kann auch einfach mit 4 Integern oder 8 Words oder 16 Bytes speichern/rechnen
und natürlich auch durch 100, 1000, 10000 oder so ... das dann natürlich jeweils mit führenden Nullen gefüllt und die Zahlenblöcke in den Dezimalstring kopiert.
(z.B. bei Byte durch 10, bei Word durch 1000 oder bei LargeWord/Integer durch 100000000, sowie unter 32 Bit würde ich mit Word und unter 64 Bit mit LongWord rechnen, um keine Überläufe in nativen Typen für die CPU zu haben).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Dez 2021 um 13:45 Uhr)
  Mit Zitat antworten Zitat