Einzelnen Beitrag anzeigen

Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Funktion die Zahlensysteme umrechnen kann bitte testen

  Alt 24. Feb 2008, 18:33
@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;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat