Hi
Die hashs sind erstmal irrelevant für dich. Das was du suchst findest du im
DEC unter Text-Formate. Diese Routinen wandeln einen Binären Wert zur Basis 2 in einen Textstring der aus Ziffern zu den Basen 16,32,64 usw. bestehen. Im Grunde handelt es sich dabei immer um eine Textkonvertierung mit Basiswechsel.
Nun, d.h. für dich das in deinem Beispiel die Zeichen '0'..'9', 'A'..'Z' ein Set aus 36 Ziffern darstellen. Dein Ziel ist es jetzt eine "Zahl" bestehend aus diesen "Ziffern" in eine andere Basis umzuwandeln, zb. Binär = Basis 2, Dezimal = Basis 10 oder Hexdezimal = Basis 16. Ich würe dir empfehlen zur Basis 2 umzuwandeln.
WIE macht man das ??
Wir haben einen String wie "0DK8Z-Y7MN-12GUO". Zuerst entfernen wir mal die Bindestriche und bekommen "0DK8ZY7MN12GUO". Jede "Ziffer" in diesem Text ist ein gemapptes Zeichen aus dem Charset ['0'..'9', 'A'..'Z'] entspräche also den Zahlen 0 bis 35. Um diesen Wert also in einen Int64 als binäre Zahle zu konvertieren müssen wir nur von Rechts nach Links den Text auswerten, die entsprechende "Ziffer" in deren Btragsmäßigen Wert um wandeln, also 0 bis 35, unseren Int64 mit 36 multiplizieren und den ermittelten Betrag addieren. Schlichtweg eben eine einfach Umwandlung einer Textformatierten Zahl in deren binärem Gegenstück. Wir machen also exakt das gleiche was zB. StrToInt() mit einem Deziamlen String macht.
Das könnte dann so aussehen:
Delphi-Quellcode:
const
Chars : PChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function ConvertToBin(const Value: String; Base: Byte = 36): Int64;
var
I,J: Integer;
begin
Result := 0;
for I := Length(Value) downto 1 do
begin
J := Pos(Value[I], Chars);
if (J > 0) and (J <= Base) then
Result := Result * Base + (J -1);
end;
end;
Nun fehlt noch der umgekehrte Schritt:
Delphi-Quellcode:
function ConvertToBase(Value: Int64; Base: Byte = 36): String;
begin
Result := '';
while Value > 0 do
begin
Result := Chars[Value mod Base] + Result;
Value := Value div Base;
end;
end;
Wie du oben erkennen solltest handelt es sich um einfachste Zahlenkonvertierungen.
Gruß Hagen