@Christian18: deinen Code kann man noch vereinfachen bzw. das
case verallgemeinern, ähnlich wie es Corpsman gemacht hat.
@Corpsman: bei dir ist der String nachher falsch herum.
Anstatt den String nachher rumzudrehen, kann man ihn aber gleich anders herum zusammen stellen.
Außerdem kommt bei euch beiden bei einer 0 ein leerer String heraus.
Mein Vorschlag:
Delphi-Quellcode:
function DecToX(Value: Cardinal;
const Basis: Byte):
String;
function GetChar(
const b: Byte): Char;
begin
if b < 10
then
Result := Chr(b + 48)
else
Result := Chr(b + 55);
end;
begin
if (Basis < 2)
or (Basis > 36)
then
raise Exception.Create('
Basis ' + IntToStr(Basis) + '
wird nicht unterstützt.');
Result := '
';
repeat
Result := GetChar(Value
mod Basis) + Result;
Value := Value
div Basis;
until Value = 0;
end;
Das ist getestet und es funktioniert!
Ach ja, noch das ganze umgekehrt:
Delphi-Quellcode:
function XToDec(s:
String;
const Basis: Byte): Cardinal;
function GetDec(
const c: Char): Byte;
begin
if c
in ['
0'..'
9']
then
Result := Ord(c) - 48
else
if c
in ['
A'..'
Z']
then
Result := Ord(c) - 55
else
if c
in ['
a'..'
z']
then
Result := Ord(c) - 87
else
raise Exception.Create('
Zeichen "' + c + '
" wird nicht unterstützt.');
end;
var i, j: Cardinal;
begin
if (Basis < 2)
or (Basis > 36)
then
raise Exception.Create('
Basis ' + IntToStr(Basis) + '
wird nicht unterstützt.');
Result := 0;
if s = '
'
then
s := '
0';
j := 1;
for i := Length(s)
downto 1
do
begin
Result := Result + GetDec(s[i]) * j;
j := j * Basis;
end;
end;