Umrechnen von Dezimal- in Hexadezimalzahlen mit Delphi programmieren

Fox

Systems
Registriert
24. Juli 2001
Reaktionspunkte
0
Ort
Dortmund
Ich schreibe momentan für meinen Informatikunterricht ein Programm mit dem ich Dezimalzahlen in Hexadezimalzahlen umrechnen kann. Hab nur das Problem das ich momentan etwas im Code festhänge und nicht weiter weiss. Er gibt nun nur noch die Buchstaben A-F für die Dezimalzahlen von 10-15 aus aber außer den Buchstaben sonst gar keine Zahlen. Ich schätze mal das irgendwas mit meiner inttostr Sache zu tun hat aber mir fällt keine Lösung ein. Das Formblatt besteht bei der ganzen Sache aus zwei Edit Feldern (eins für die Dezimalzahl und eins für die Hexadezimalzahl), einem Button zum umrechnen und einem Butten zum schließen des Programms. Hier mal das was in der Unit1.pas steht:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls, Menus, jpeg;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Panel1: TPanel;
Panel2: TPanel;
Button1: TButton;
Button2: TButton;
Image1: TImage;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
hex2 : integer;
hex1 : integer;
hex0 : integer;
hex2s: string;
hex1s: string;
hex0s: string;
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
hex2 := strtoint (Edit1.Text) DIV 256;
hex1 :=(strtoint (Edit1.Text) MOD 256) DIV 16;
hex0 := strtoint (Edit1.Text) MOD 16;

IF hex2 = 10
Then hex2s := 'A';
IF hex2 = 11
Then hex2s := 'B';
IF hex2 = 12
Then hex2s := 'C';
IF hex2 = 13
Then hex2s := 'D';
IF hex2 = 14
Then hex2s := 'E';
IF hex2 = 15
Then hex2s := 'F';

IF hex1 = 10
Then hex1s := 'A';
IF hex1 = 11
Then hex1s := 'B';
IF hex1 = 12
Then hex1s := 'C';
IF hex1 = 13
Then hex1s := 'D';
IF hex1 = 14
Then hex1s := 'E';
IF hex1 = 15
Then hex1s := 'F';

IF hex0 = 10
Then hex0s := 'A';
IF hex0 = 11
Then hex0s := 'B';
IF hex0 = 12
Then hex0s := 'C';
IF hex0 = 13
Then hex0s := 'D';
IF hex0 = 14
Then hex0s := 'E';
IF hex0 = 15
Then hex0s := 'F';

Edit2.Text := (hex2s) + (hex1s) + (hex0s);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

end.

Ich hoffe mal das mir hier vielleicht jemand damit helfen kann.
 

Anzeige

Re: Umrechnen von Dezimal- in Hexadezimalzahlen mit Delphi programmieren
Also in PAS benötige ich ein einfaches Array (als Konstante) für die Sache ;) .

Mal ein Teil aus nem Prog kopiert:

program mysecretprog;
uses crt;
const list:array[0..15] of char='0123456789ABCDEF';
var s1,sb1:real;
s2,s3,sb,sb2,sb3,count:integer;
litt,fitt:string;
buf:array[1..30] of byte;
a,x,y:byte;
b,c,d,e:word;
ch:char;
label x2,x3,x4;

procedure lohi1;
begin
sb1:=(c/256);
sb2:=trunc(sb1);
sb3:=trunc((sb1-sb2)*256);
end;

procedure lohi;
begin
s1:=(sb/16);
s2:=trunc(s1);
s3:=trunc((s1-s2)*16);
end;

procedure conv;
begin
lohi;
litt:=(list[s2]+list[s3]);
end;

procedure getad;
begin
lohi1;
sb:=sb2;
conv;
fitt:=litt;
sb:=sb3;
conv;
fitt:=fitt+litt;
end;

BEGIN

...

; c enthält den Ergebniswert vom Typ Word (wenn ich den direkt über writeln(c) ausgeben würde, würde er quasi als Dezimalwert ausgegeben werden)

getad; writeln(fitt);
end.

Das Ergebnis (fitt) ist ein String ! Ich habe den Deklarationsteil nicht nochmal überflogen. Da werden viele Variablen drin sein, die nicht zur Dec2Hex-Routine gehören.
Meine Routine ist nur bis max. FFFF (also Word) ausgelegt. Entsprechende Anpassung ist erforderlich.

Sieh die Konstante wie eine Art "Übersetzungstabelle". Die Konstante list enthält 16 Zellen (0 bis 15) mit den Werten "0", "1", "2"...."D", "E", "F". Jeder Zahl von 0 bis 15 läßt sich dann ein Zeichen "0"..."F" zuordnen. Wenn Du dann die einzelnen Zeichen zusammenfäßt (addierst), erhälst Du dann die Hex-Zahl als String.
 
Hallo Fox,

in den Fällen, in denen hex2, hex1 und hex0 im Bereich 0 bis 9 sind, weist du den Variablen hex2s, hex1s und hex0s keine Wert zu! Edit2.Text bekommt seinen Wert aber durch letztere zugewiesen und kann natürlich dann auch keine Ergebnisse ausgeben!

Grunsätzlich würde ich redundanten Code (if ... then ...) vermeiden, in dem ich eine allgemeingültige case-Anweisung schreibe. Verkürzt das Programm und erleichtert die Fehlersuche.

Falls es noch nicht klappen sollte, poste ich gerne noch den Sourcecode. :)

Viel Erfolg, Regine.
 
@mighty
Sorry aber aus der Pascal Sache werd ich überhaupt nicht schlau. Hab nur Delphi seit ca. nem halben Jahr. Von dem Pascal dahinter hab ich kein Plan.

@keksdose
Hab jetzt die Zahlen von 0-9 definiert und jetzt funzt es. Case Anweisungen kenne ich leider noch nicht. Trotzdem danke für die Hilfe.

@all
Jetzt muss ich nur noch die Umkehrfunktion schreiben. Von Hex nach Dez. Naja aber mit der Umrechnungsmethode bei mir um Buch kann das nicht funzen. Die dezimale Bedeutung der ersten Ziffer mal 16 und dann die restlichen Ziffern addieren.
Aber wenn man ja 100 als Hex hat dann kommt als Dez ja 256 raus. Das kann mit dem rechenweg wie oben beschrieben nicht funzen.
 
Zurück