![]() |
MD5-Hashwert als 40-stellige Dezimalzahl
Hallo zusammen,
ich brauche einen MD5-Hashwert als 40-stellige Dezimalzahl. Ich habe den Hash wie üblich als 32-stelligen Hex-Wert. Wie kriege ich jetzt daraus einen 40-stelligen Dezimalwert? |
AW: MD5-Hashwert als 40-stellige Dezimalzahl
|
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Das kann doch dann nur auf Stringbasis funktionieren, weil als Zahl lehnt der Compiler das ab:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; begin try var HexValue: UInt64 := $11111111111111111111111111111111; var HexValue2: UInt64 := $FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Code:
[dcc32 Error] Project1.dpr(12): E2102 Integer constant too large
[dcc32 Error] Project1.dpr(13): E2102 Integer constant too large |
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Dann nimm das eben als 4x4 Integer/Cardinal.
Willst du das nun als "eine" Dezimalzahl oder einfach nur "binär" haben? |
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Zitat:
StrToInt geht nicht, denn das Ergebnis müsste ein 128-bit-integer sein, ist also viel zu groß. Also bräuchte ich etwas auf Stringbasis. Oder eine MD5-Function, die gleich den Dezimalwert als String liefert. |
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Zitat:
Zitat:
|
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Joar, nativ kannst das in Delphi nunmal dann nur als String umsetzen.
Und "führende Nullen" besagen auch, dass es eine Stringrepresentation sein soll. :zwinker: Zitat:
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). |
AW: MD5-Hashwert als 40-stellige Dezimalzahl
Ich habe es jetzt mit den BigIntegers von Rudy Velthuis gelöst:
![]() Damit wird die Angelegenheit zum Zweizeiler:
Delphi-Quellcode:
var A:BigInteger;
A:= '$098f6bcd4621d373cade4e832627b4f6'; Label1.Caption:=A.ToString; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz