Autor Beitrag
bavci
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 21:43 
ich habe eine Variable j, deren Wert als Integer vorliegt. Jetzt möchte ich sie in das Hex-Format konvertieren, aber mit inttohex habe ich probleme. Dort muss ich ja nen speziellen Wert angeben, aber ich will/muss das irgendwie als "j" unterbringen !?
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 21:48 
:welcome:
Probier mal inttohex(j,8).
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Fr 18.03.05 21:48 
Hallo und :welcome: im DF,

könntest Du Deine Frage ein bisschen präzisieren? Du willst ein Integer j Hexadezimal darstellen lassen:  Label1.Caption := IntToHex(j, 8);

Wo genau liegt jetzt das Problem?

Gruß,
raziel

_________________
JSXGraph
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Fr 18.03.05 22:14 
IntToHex benötigt zwei Parameter. Der erste ist der Wert. In deinem Fall wäre das die Variable J. Der zweite Parameter sagt aus wie lang der String werden soll, denn IntToHex konvertiert den Wert in einen String.

Wenn du den Wert 255 mit 2 Stellen konvertierst, ...

ausblenden Delphi-Quelltext
1:
IntToHex(2552);					


dann kriegst du diesen Wert:

ausblenden Delphi-Quelltext
1:
FF					


Wenn du den Wert 255 mit 4 Stellen konvertierst, ...

ausblenden Delphi-Quelltext
1:
IntToHex(2554);					


dann kriegst du diesen Wert:

ausblenden Delphi-Quelltext
1:
00FF					

_________________
Popov
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:14 
das Problem liegt darin, dass genau das nicht geht. Wenn ich anstelle j eine Zahl einsetze, dann geht es. Aber da j jedesmal nen anderen Wert hat, darf ich dort keinen festen Wert hinschreiben...........

Bekomme beim compilen den Fehler:
"Es gibt keine überladene Version von 'IntToHex', die man mit diesen Argumenten aufrufen kann".

Bin noch Anfänger, habe erst heute mit Delphi angefangen. Bin aber schon weit gekommen für den ersten Tag. Habe davor mehr mit C probiert...........
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 22:18 
Poste doch mal einige Zeilen deines Quellcodes, dann werden wir das Problem sicher bald finden.
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:30 
es handelt sich um ne Uhrzeitumrechnung, für ein bestimmtes Gerät (Hex-Uhrzeit => Normale Uhrzeit funktioniert. Nur für das umgekehrt habe ich das genannte problem):

ausblenden volle Höhe Delphi-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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Hextime: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    h: TEdit;
    Label3: TLabel;
    min: TEdit;
    Label4: TLabel;
    sek: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var
a,k: String;
b: integer;
c,d,e,f,g,i,j: real;

procedure TForm1.Button1Click(Sender: TObject);
begin
a:=Hextime.text;
b:=strtoint('$'+a);
c:=b*2/3600 - b*2 mod 3600/3600;
d:=b*2 mod 3600 / 60 - b*2 mod 3600 mod 60 /60;
e:=b*2 mod 3600 mod 60;
h.text:=floattostr(c);
min.text:=floattostr(d);
sek.text:=floattostr(e);

end;


procedure TForm1.Button2Click(Sender: TObject);
begin
f:=(strtoint(h.text))*3600;
g:=(strtoint(min.text))*60;
i:=(strtoint(sek.text));
j:=(f+g+i)/2;
k:=intToHex(j,8);

end;

end.


Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:31 
Das Problem liegt in der 2.ten funktion (Button2)..........
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 22:32 
:arrow: j ist bei dir kein Integer, sondern ein real. Das ist ne Gleitkommazahl, die du vor dem Konvertieren runden musst.
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:37 
und wie runde ich die !? Denn die Zahl hat nie kommastellen..............


Zuletzt bearbeitet von bavci am Fr 18.03.05 22:38, insgesamt 1-mal bearbeitet
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 22:38 
Mit Round(j)
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:40 
dann erhalte ich die vorhin gennante fehlermeldung und noch eine mehr:
"Anweisung erforderlich, aber Ausdruck vom Typ 'Int64' gefunden"
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 22:43 
ausblenden Delphi-Quelltext
1:
k := IntToHex(Round(j),8);					
bavci Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 18.03.05 22:46 
Danke, es klappt endlich :D
Aber ich verstehe nicht warum ich den Wert runden musste !? Die Zahle hatte keine stelle hinter'm komma.............
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Fr 18.03.05 22:57 
Delphi hat eine strenge Typenprüfung (abgesehen von Variant). Delphi konvertiert nicht automatisch von real zu integer (umgekehrt aber schon).
user profile iconbavci hat folgendes geschrieben:
Die Zahle hatte keine stelle hinter'm komma.............

Woher sollte dein Programm denn das wissen? j ist eine Gleitkommazahl und könnte Nachkommastellen haben!
Harry Hunt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 50



BeitragVerfasst: Fr 18.03.05 23:28 
Die strenge Typisierung von Delphi verhindert viele Leichtsinnsfehler bevor sie entstehen. Dabei ist Delphi sogar noch recht tolerant - in Programmiersprachen wie Ada kann man zu einer Real-Variable ohne vorherige Konvertierung z.B. noch nicht einmal einen Integerwert dazuaddieren.
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Fr 18.03.05 23:35 
Du hättest auch so programmieren können:

ausblenden Delphi-Quelltext
1:
2:
j:=(f+g+i) div 2;  
k:=intToHex(j,8);


f, g und i waren bereits Integer. Erst das Dividieren durch 2 machte das ganze zu Real. Mit einem Integer DIV würde die Berechnung ein Integer bleiben.

_________________
Popov