| Autor | 
Beitrag | 
bavci 
Hält's aus hier
 
Beiträge: 12 
 
 
 
 | 
Verfasst: Fr 18.03.05 20: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 20:48 
 
 
Probier mal  inttohex(j,8).  
 
 | 
 | 
raziel 
        
 
Beiträge: 2453 
 
Arch Linux 
JS (WebStorm), C#, C++/CLI, C++ (VS2013) 
 | 
Verfasst: Fr 18.03.05 20: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 21:14 
 
 | 
 | 
bavci   
Hält's aus hier
 
Beiträge: 12 
 
 
 
 | 
Verfasst: Fr 18.03.05 21: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 21: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 21: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 21:31 
 
Das Problem liegt in der 2.ten funktion (Button2).......... 
 
 | 
 | 
delfiphan 
        
 
Beiträge: 2684 
Erhaltene Danke: 32 
 
 
 
 | 
Verfasst: Fr 18.03.05 21: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 21:37 
 
und wie runde ich die !? Denn die Zahl hat nie kommastellen.............. 
 
  Zuletzt bearbeitet von bavci am Fr 18.03.05 21:38, insgesamt 1-mal bearbeitet
 | 
 | 
delfiphan 
        
 
Beiträge: 2684 
Erhaltene Danke: 32 
 
 
 
 | 
Verfasst: Fr 18.03.05 21:38 
 
 | 
 | 
bavci   
Hält's aus hier
 
Beiträge: 12 
 
 
 
 | 
Verfasst: Fr 18.03.05 21: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 21:43 
 
		                                                          Delphi-Quelltext                                	 															1:
  				 | 									k := IntToHex(Round(j),8);					 				 | 			 		 	   
 
 | 
 | 
bavci   
Hält's aus hier
 
Beiträge: 12 
 
 
 
 | 
Verfasst: Fr 18.03.05 21: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 21: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 22: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 22: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
  
 | 
 |