Zurück zu den Projekten
archiviert 2021

Umrechner

Zahlensystemkonverter zwischen Dezimal, Hexadezimal und Binär in Object Pascal.

RolleDesktopentwickler StackLazarus · Object Pascal · LCL

Lazarus Desktopanwendung mit drei Eingabefeldern für Dezimal, Hexadezimal und Binär. Sobald ein Feld verlassen wird, konvertiert die Anwendung den eingegebenen Wert sofort in die beiden anderen Zahlensysteme. Die Konvertierungslogik ist manuell implementiert: Modulo und ganzzahlige Division für Dezimal zu Binär und Dezimal zu Hex, zeichenweises Parsen für die Rückrichtungen.

Highlights

  • Konvertierung in beide Richtungen zwischen allen drei Zahlensystemen.
  • Vollständig manuelle Implementierung ohne Standardbibliothek.
  • Interaktive Demo direkt im Browser ausprobierbar.
3Zahlensysteme
6Konvertierungsrichtungen
~150Codezeilen
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, math;

type

  { TForm1 }

  TForm1 = class(TForm)
    Edit1: TEdit;   // Dezimalfeld
    Edit2: TEdit;   // Hexfeld
    Edit3: TEdit;   // Binaerfeld
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Edit1EditingDone(Sender: TObject);
    procedure Edit2EditingDone(Sender: TObject);
    procedure Edit3EditingDone(Sender: TObject);
    function reverseString(str: String): String;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ Dezimal -> Binaer und Dezimal -> Hex }
procedure TForm1.Edit1EditingDone(Sender: TObject);
var hexa, dec, bin, hexkette: string;
begin
  if edit1.text <> '' then
  begin
    bin := '';
    hexa := '';
    hexkette := '0123456789ABCDEF';
    dec := Edit1.Text;
    repeat
      if StrToInt(dec) MOD 2 = 1
        then bin := bin + '1'
        else bin := bin + '0';
      dec := inttostr(StrToInt(dec) DIV 2);
    until dec = '1';
    bin := bin + '1';
    edit3.text := reverseString(bin);
    dec := Edit1.Text;
    repeat
      hexa := hexa + copy(hexkette, (StrToInt(dec) MOD 16) + 1, 1);
      dec := IntToStr(StrToInt(dec) DIV 16);
    until dec = '0';
    edit2.text := reverseString(hexa);
  end;
end;

{ Hilfsfunktion: dreht einen String zeichenweise um }
function TForm1.reverseString(str: String): String;
var ausgabe: String; i: Integer;
begin
  ausgabe := '';
  for i := Length(str) downto 1 do
    ausgabe := ausgabe + copy(str, i, 1);
  Result := ausgabe;
end;

end.