Autor |
Beitrag |
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 18.03.05 21:48
Probier mal inttohex(j,8).
|
|
raziel
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Fr 18.03.05 21:48
Hallo und 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
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Fr 18.03.05 22:14
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 18.03.05 22:18
Poste doch mal einige Zeilen deines Quellcodes, dann werden wir das Problem sicher bald finden.
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: 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):
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 public 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 UGrohne: Code- durch Delphi-Tags ersetzt.
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 18.03.05 22:31
Das Problem liegt in der 2.ten funktion (Button2)..........
|
|
delfiphan
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 18.03.05 22:32
j ist bei dir kein Integer, sondern ein real. Das ist ne Gleitkommazahl, die du vor dem Konvertieren runden musst.
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 18.03.05 22:38
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: 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
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Fr 18.03.05 22:43
Delphi-Quelltext 1:
| k := IntToHex(Round(j),8); |
|
|
bavci
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 18.03.05 22:46
Danke, es klappt endlich
Aber ich verstehe nicht warum ich den Wert runden musste !? Die Zahle hatte keine stelle hinter'm komma.............
|
|
delfiphan
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: 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).
bavci 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
Beiträge: 50
|
Verfasst: 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
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Fr 18.03.05 23:35
Du hättest auch so programmieren können:
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
|
|