Autor Beitrag
Projekt Messdaten
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 30.09.02 10:03 
Hallo,
ich hab ein Problem mit Hex-Werten. Ich möchte sie gerne umwandeln aber es will nicht so recht funktionieren. Hier mein Code, kann mir da vielleicht jemand sagen woran es liegt. Danke
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
function getnum(h1: String): Integer;
var
d1: Integer;
begin
 h1:=lowercase(h1);
 if h1 = '0' Then d1 := 0;
 if h1 = '1' Then d1 := 1;
 if h1 = '2' Then d1 := 2;
 if h1 = '3' Then d1 := 3;
 if h1 = '4' Then d1 := 4;
 if h1 = '5' Then d1 := 5;
 if h1 = '6' Then d1 := 6;
 if h1 = '7' Then d1 := 7;
 if h1 = '8' Then d1 := 8;
 if h1 = '9' Then d1 := 9;
 if h1 = 'a' Then d1 := 10;
 if h1 = 'b' Then d1 := 11;
 if h1 = 'c' Then d1 := 12;
 if h1 = 'd' Then d1 := 13;
 if h1 = 'e' Then d1 := 14;
 if h1 = 'f' Then d1 := 15;
 result:=d1;
end;

function hextoint(hex: String): Integer;
var
 d: Integer;
 i: Integer;
 dez: Integer;
 h: String;
 dd: Integer;
begin
 i:=1;
 dez:=0;
 while i < length(hex)+1 do
 begin
   h:=copy(hex, i, 1);
   d:=getnum(h);
   dd:=d*round(power(16, length(hex)-i));
   dez:=dez+dd;
   inc(i);
 end;
 result:=dez;
end;

Delphi bringt auch beim Compilieren den Fehler:'Ungenügende Forward- oder External-Deklaration.'
Es liegt aber kein Schreibfehler im Funktionskopf vor, deshalb???

mfg
Daniel
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Mo 30.09.02 10:12 
Hi user defined image,
Hmm, die Funktion kenn ich irgendwo her, hab zufällig ich geschrieben :mrgreen:

Schreib einfach
ausblenden Quelltext
1:
2:
function getnum(h1: String): Integer;
function hextoint(hex: String): Integer;
direkt über implementation :wink:

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
Projekt Messdaten Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 30.09.02 10:19 
Hallo
hab ich schon gemacht, deswegen frag ich mich ja auch, wieso er diesen Fehler bringt!??
Ist es auch möglich mit dieser Function, wenn sie mal funktioniert, Hex-Werte aus einer ListBox als Variable zu laden und als Dezimal-Wert in eine andere ListBox zu schreiben???

Danke
Daniel
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Mo 30.09.02 10:28 
Also ich hab kein Problem damit. Hier das von dir gewünschte Beispiel:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function getnum(h1: String): Integer;
function hextoint(hex: String): Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i:=0;
  ListBox2.Clear;
  while i < self.ListBox1.Items.Count do
  begin
    ListBox2.Items.Add(inttostr(hextoint(ListBox1.Items.Strings[i])));
    inc(i);
  end;
end;

function getnum(h1: String): Integer;
var
d1: Integer;
begin
h1:=lowercase(h1);
if h1 = '0' Then d1 := 0; 
if h1 = '1' Then d1 := 1; 
if h1 = '2' Then d1 := 2; 
if h1 = '3' Then d1 := 3; 
if h1 = '4' Then d1 := 4; 
if h1 = '5' Then d1 := 5; 
if h1 = '6' Then d1 := 6; 
if h1 = '7' Then d1 := 7; 
if h1 = '8' Then d1 := 8; 
if h1 = '9' Then d1 := 9; 
if h1 = 'a' Then d1 := 10; 
if h1 = 'b' Then d1 := 11; 
if h1 = 'c' Then d1 := 12; 
if h1 = 'd' Then d1 := 13; 
if h1 = 'e' Then d1 := 14;
if h1 = 'f' Then d1 := 15; 
result:=d1; 
end; 

function hextoint(hex: String): Integer;
var 
d: Integer; 
i: Integer; 
dez: Integer; 
h: String; 
dd: Integer; 
begin 
i:=1; 
dez:=0; 
while i < length(hex)+1 do 
begin 
   h:=copy(hex, i, 1); 
   d:=getnum(h); 
   dd:=d*round(power(16, length(hex)-i));
   dez:=dez+dd;
   inc(i);
end;
result:=dez;
end;

end.


Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
Projekt Messdaten Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 30.09.02 10:52 
Klasse, :D
vielen Dank Arakis. Funktioniert einwandfrei.
Hab function hextoint... nicht bei var sondern in public geschrieben.
Wahrscheinlich deshalb der Fehler

Danke :lol:
Daniel
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Do 03.10.02 16:30 
Und hier noch eine Alternative für alle, die den Spaß und Lerneffekt beim selber Coden nicht brauchen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
var i1, i2 : Integer;
begin
  i1 := StrToInt(Edit1.Text);
  Edit2.Text := Format('%x',[i1]); // Ausgabe als HEX

  i2 := StrToInt('$'+Edit2.Text); // Umwandlung in INT
  Edit3.Text := IntToStr(i2);
end;

(Nur mal eben auf die Schnelle. Man sollte sowas natürlich noch in ein Try-Except kapseln.)

Ich bin zugegebenermaßen etwas faul und verwende lieber Routinen die eh schon vorhanden sind.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."