archiviert 2021
Umrechner
Zahlensystemkonverter zwischen Dezimal, Hexadezimal und Binär in Object Pascal.
01 · Überblick
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.
02 · Wirkung
3Zahlensysteme
6Konvertierungsrichtungen
~150Codezeilen
03 · Architektur
04 · Datenmodell
05 · Interaktive Demo
06 · Quellcode
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.