Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi Und noch eine Variante zur Konvertierung von Zahlensystemen (https://www.delphipraxis.net/103031-und-noch-eine-variante-zur-konvertierung-von-zahlensystemen.html)

Maddin1 8. Nov 2007 19:06


Und noch eine Variante zur Konvertierung von Zahlensystemen
 
Also, hier noch eine Möglichkeit unter Zahlensysteme zu de-/konvertieren.

Zunächst jedoch braucht man eine Funktion zur Berechnung von Potenzen:

Delphi-Quellcode:
function Potenz(basis : byte; exp : byte) : longint;
var z : longint;  //Speicherung von Zwischenergebnissen
    i : byte;     //Zählvariable für die Schleife
Begin
 z:=1;
 for i:=1  to exp do z:=z*basis;
 Potenz:=z;
End;
Nun zum Konvertieren aus dem Dezimalsystem in jedes andere bis Hexadezimal.
Der Parameter d ist die zu konvertierende Dezimalzahl
und b die Basis des gewünschten Zahlensystems.
Delphi-Quellcode:
procedure konvert(d : word;b : byte; var z: string);
var r : byte; //Rest der ganzzahligen Division
begin
 z:='';
 Repeat
  r := d mod b;     //mod = Rest der ganzzahligen Division
  d := d div b;     //div = ganzzahlige Division
  case r of
   10 : z:='A'+z;
   11 : z:='B'+z;
   12 : z:='C'+z;
   13 : z:='D'+z;
   14 : z:='E'+z;
   15 : z:='F'+z;
  else
  z:=chr(r+48)+z; end;

 Until d=0;
       end;
Die Rekonvertierung ist dann auch nicht mehr all zu viel^^.
Der Parameter z ist wieder die zu rekonvertierende Zahl(oder halt auch String) und b die Basis des gewünschten Zahlensystems.
Delphi-Quellcode:
function rekonvert (z : string; b : byte) : word;
var l :     integer;
    I :     byte;
    dz :    word;
    ziffer : byte;
begin
l:= length (z);//Speichert die länge des Strings, sprich die Anzahl der Ziffern
 dz:=0;
 for I := 1 to l do begin
 //Umwandlung von ASCII-Zeichen in Zahlwerte
 case z[i] of
 '0'..'9' : ziffer:= ord(z[i])-48;
 'A'..'F' : ziffer:= ord(z[i])-55;
 end;
  dz:=dz + ziffer*Potenz (b,l-i);
 end;
 rekonvert:=dz;
end;
Es ist nun nicht von Bedeutung, dass konvert eine Prozedur ist und rekonvert eine Funktion.
Ich habe es nur zu Test-Zwecken umgeschrieben und es kann je nach Wunsch, wieder zurück geschrieben werden.
Ich hoffe ich konnte Euch helfen. Und in diesem Sinne, viel Spass^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz