Ich werde nun einen Code vorstellen, mit dem man jede beliebige Zahl eines beliebigen Zahlensystem in jedes andere verwandeln kann.
dabei muss natürlich die Zahl in einen Int64 passen und das Zahlensystem muss <37 sein, da man sonst Sonderzeichen nehmen müsste...aber wers braucht kanns einfach anpassen.
Die hierfür entscheidende Stelle ist in GetChar bzw GetInt.
Hier erstmal etwas Code, den ich nachher brauche
Delphi-Quellcode:
function GetChar(Number: Integer):Char;
//Integer in Char umwandeln (z.B. 10 zu A)
begin
if Number<10
then
Result:=Chr(Number+48)
else
if Number<91
then
Result:=Chr(Number+55)
else
Result:='
';
end;
function GetInt(Value: Char):Integer;
//Char in Integer umwandeln (z.B. A zu 10)
begin
Result:=Ord(Value);
if Result<58
then
Result:=Result-48
else
if Result<91
then
Result:=Result-55
else
Result:=0;
end;
function Potenz (Base, Exp : Integer): Int64;
//berechnet eine Potenz...wahlweise auch IntPower in der Unit Math
var
i: Integer;
begin
Result:=1;
for i:=1
to Exp
do
Result:=Result * Base;
end;
Nun der Code, mit dem Ich eine Dezimalzahl in eine Zahl der Basis Base umwandle.
Delphi-Quellcode:
function DecToBase(Value:Int64; Base:Integer):String;
var Rest:Integer;
begin
repeat
Rest:=Value Mod Base;
Value:=Value Div Base;
Result:=GetChar(Rest) + Result;
until Value=0;
end;
Der Code um eine Zahl der Basis Base in eine Dezimalzahl umzuwandeln
Delphi-Quellcode:
function BaseToDec(Value:String; Base:Integer):Int64;
var
i, j:Integer;
begin
j:=0;
Result:=0;
for i:=Length(Value) downto 1 do
begin
Result:=Result + GetInt(Value[i]) * Potenz(Base,j);
inc(j);
end;
end;
So, und nun das ganze in eine Function verpackt:
Delphi-Quellcode:
function BaseToBase(StartBase: Integer; Value: String; EndBase: Integer):String;
begin
Result:=DecToBase(BaseToDec(Value, StartBase), EndBase);
end;
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
[edit=Chakotay1308]Anhänge geupdatet. Mfg, Chakotay1308[/edit]
[edit=Chakotay1308]Fehler im Source korrigiert. Mfg, Chakotay1308[/edit]