Hi,
Ich wurde gerade gefragt, wie man z.B. Zahlen aus dem Dezimalsystem ins Hexadezimalsystem konvertiert.
Darauf hat mich der Ehrgeiz gepackt und ich habe aus Eigeninteresse versucht Zahlen zwischen beliebigen Zahlensystemen hin und herzukonvertieren. Das was rauskam, war meines Erachtens einen CodeLib Beitrag Wert. Allerdings hab ich gesehn, dass glkgereon da schon was gepostet hatte.
Aber da ich mit nur 2 Funktionen auskomme und mein Code sich sonst auch mehr oder weniger stark von glkgereons Code unterscheidet, wollte ich meinen auch mal posten.
Link zum CodeLib Beitrag:
*klick*
Delphi-Quellcode:
uses Math;
function BaseToDec(Value: String; Base: Byte): Int64;
var tmp: Byte;
i: Integer;
begin
Result := 0;
for i:= Length(Value) downto 1 do
begin
tmp := Ord(Value[i]);
if tmp in [$30..$39] then
tmp := tmp - $30
else
tmp := 9 + (tmp-$40);
Result := Result + (tmp*Round(IntPower(Base,Length(Value)-i)));
end;
end;
function ConvertNumber(Value: String; SrcBase,DestBase: Byte): String;
var nr,old: Int64;
tmp: Byte;
begin
if (not (SrcBase in [2..36])) or (not (DestBase in [2..36])) then
exit;
nr := BaseToDec(Value,SrcBase);
repeat
old := nr;
nr := old div DestBase;
tmp := old mod DestBase;
if tmp > 9 then
Result := Chr($40+tmp-9) + Result
else
Result := IntToStr(tmp) + Result;
until nr = 0;
end;
Das wars dann auch erstmal
Edit: Hatte doch auch was zu Phantom1s Funktion geschrieben o.O Naja dann halt noch nachträglich.
Habe die bei einer Foren Suche entdeckt und wollte sie auch mal erwähnt haben. Die Funktion wurde wie gesagt von Phantom1 gepostet. Ob Sie ursprünglich von Phantom1 stammt, weiß ich nicht:
Delphi-Quellcode:
function BaseToBase(Value: string; StartBase, EndBase: byte): string;
const Digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var i: Integer; dez, j: Int64;
begin
Result:='';
if (StartBase<2) or (StartBase>36) or
(EndBase<2) or (EndBase>36) then Exit;
for i:=1 to Length(Value) do begin
j:=Pos(Value[i], Digits);
if (j>StartBase) or (j=0) then Exit;
end;
j:=1;
dez:=0;
for i:=Length(Value) downto 1 do begin
dez:=dez + (Pos(Value[i], Digits)-1) * j;
j:=j*StartBase;
end;
repeat
Result:=Digits[dez mod EndBase+1] + Result;
dez:=dez div EndBase;
until dez=0;
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."