Autor |
Beitrag |
delphi-programmierer
      
Beiträge: 48
DOS, WIN XP
RAD Studio 2010, Turbo Pascal 6.0
|
Verfasst: Mo 01.01.07 21:07
Hallo Leute,
ich wollte eine Dezimalzahl in eine Hexadezimalzahl umwandeln. Das Ergenis soll aber kein String sein, sondern eine Integer-Zahl mit dem Dollar-Zeichen davor (z.B. $A36).
Mit der Funktion "IntToHex kommt man ja nicht weit, weil sie als Ergebnis einen String liefert. Welchen Algorithmus kann man aufstellen, um dies zu erreichen?
MfG Paul
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 01.01.07 21:10
Moin!
delphi-programmierer hat folgendes geschrieben: | ich wollte eine Dezimalzahl in eine Hexadezimalzahl umwandeln. Das Ergenis soll aber kein String sein, sondern eine Integer-Zahl mit dem Dollar-Zeichen davor (z.B. $A36). |
Das geht nicht.
Vielleicht sagst du einfach mal, was du da machen willst...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Sirke
      
Beiträge: 208
Erhaltene Danke: 2
|
Verfasst: Mo 01.01.07 21:11
Was du machen möchtest, ist meiner Meinung nach nicht möglich, weil eine Hex-Ausgabe auch Buchstaben enthält und diese nur als String ausgegeben werden.
IntToHex() ist eine Ausgabefunktion und man gibt nun mal eh alles in Strings aus!
Solltest du irgendetwas besonderes mit diesen Hex-Zahlen machen wollen, muss man sich vllt etwas anderes ausdenken.
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mo 01.01.07 21:31
Du kannst in Delphi durchaus Strings, die eine Hex-Zahl enthalten, zur Zahl machen mit Quelltext . Die Funktion wertet das Dollar-Zeichen ($) korrekt aus.
Dieses hier zeigt z.B. im Label2 "100" an:
Delphi-Quelltext 1: 2:
| Label2.Caption:= IntToStr(StrToInt('$FF')+5-StrtoInt('$A0')); |
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 01.01.07 21:44
also du willst 'ne dezimalzahl als integer darstellen, nicht als string... wenn du auf's dollar zeichen verzichenten kannst dann in etwa so..
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure foo; var d: real; i: integer; begin i := trunc(d); end; |
delphi-programmierer hat folgendes geschrieben: | ich wollte eine Dezimalzahl in eine Hexadezimalzahl umwandeln. Das Ergenis soll aber kein String sein, sondern eine Integer-Zahl |
hinweis: mit $zeichen, wär's kein integer mehr, sondern 'n string.
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mo 01.01.07 21:59
Grenzgaenger hat folgendes geschrieben: | also du willst 'ne dezimalzahl als integer darstellen, nicht als string... |
Nein, er will eine Hexadezimalzahl als Integer darstellen.
Das geht nicht. Dargestellt werden müssen sie als String und will man mit ihnen weiter rechnen, dann muss man eben StrToInt benutzten, so wie ich in meinem vorherigen Posting geschrieben habe.
|
|
delphi-programmierer 
      
Beiträge: 48
DOS, WIN XP
RAD Studio 2010, Turbo Pascal 6.0
|
Verfasst: Mo 01.01.07 22:21
Hallo Leute,
ich danke für eure Antworten. Die Hexadezimalzahlen brauchte ich für einen Verschlüsselungsalgorithmus. Das Passwort wird in eine Hexadezimalzahl umgewandelt, mit der dann verschiedene Verschlüsselungsalorithmen angewandt werden. Dafür musste ich die Zahl im Integer-Typ haben.
Allerdings wird mit StrToInt die Hexadez.-Zahl in eine Dez.-Zahl umgewandelt. Es gibt aber auch Integer-Zahlen die solch ein Dollarzeichen enthalten.
Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm2.FormCreate(Sender: TObject); var i:integer; begin i:=$A6739+$629A; end; |
Meine Frage war, ob man den Ausgabe-String der Funktion IntToHex wie z.B. '$A96' in ein Integer-Format wie zum Beispiel $A96 umwandel kann. Die Buchstaben und das Dollarzeichen sollen dabei erhalten bleiben (s. Quelltext);
|
|
JayK
      
Beiträge: 1013
|
Verfasst: Mo 01.01.07 23:04
Dem PC isses doch völlig egal, wie DU deine Zahlen vorliegen hast, für ihn sind es sowieso Nullen und Einsen  Deshalb sehe ich den Sinn nicht einen dezimalen Integer in einem Hexadezimalen Integer umzuwandeln zu wollen - es ist doch genau das gleiche. Du kannst im Source schreiben I := 255; oder I := $FF; beides bewirkt haargenau dasselbe. Deshalb kannst du genausogut mit StrToInt arbeiten. Intern is wie gesagt sowieso alles Binär.
EDIT: Zitat: | Meine Frage war, ob man den Ausgabe-String der Funktion IntToHex wie z.B. '$A96' in ein Integer-Format wie zum Beispiel $A96 umwandel kann. Die Buchstaben und das Dollarzeichen sollen dabei erhalten bleiben (s. Quelltext); |
Delphi-Quelltext 1:
| i:= StrToInt('$A6739') + StrToInt('$629A'); |
bzw.
Delphi-Quelltext 1:
| i := StrToInt('$'+IntToHex(39845635)) + StrToInt('$'+IntToHex(435875985)); |
weiß grad nicht, ob IntToHex von sich aus ein '$' davorhängt, mir war nicht so...
Oder hab ich jetzt alles völlig falsch verstanden? ^^
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mo 01.01.07 23:20
delphi-programmierer hat folgendes geschrieben: | Hallo Leute,
Es gibt aber auch Integer-Zahlen die solch ein Dollarzeichen enthalten.
Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm2.FormCreate(Sender: TObject); var i:integer; begin i:=$A6739+$629A; end; |
Meine Frage war, ob man den Ausgabe-String der Funktion IntToHex wie z.B. '$A96' in ein Integer-Format wie zum Beispiel $A96 umwandel kann. Die Buchstaben und das Dollarzeichen sollen dabei erhalten bleiben (s. Quelltext); |
Nein. Dein Quelltext enthält keine Integer-Variable mit $-Zeichen. Er enthält Hexadezimal- Ausdrücke, die der Delphi- Compiler verarbeiten kann. Du kannst mit i dann rechnen, aber es wird dir nie mit $-Zeichen dargestellt, denn eine Darstellung einer Hex-Zahl im Programm geht nur über einen String.
|
|
delphi-programmierer 
      
Beiträge: 48
DOS, WIN XP
RAD Studio 2010, Turbo Pascal 6.0
|
Verfasst: Mo 01.01.07 23:42
OK, du hast recht. Dem Prozesssor ist es völlig Wurst wie die Zahlen vorliegen. Diese Frage diente lediglich mehr der Form der Ausgabe.
Jetzt noch was anderes. Das Delphi mit Hexadezimalzahlen umgehen kann, haben wir jetzt gesehen. Aber wie ist es mit Binärzahlen?? Kann Delphi mit denen genau so umgehen wie mit Hexadezimalzahlen??
|
|
Allesquarks
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Di 02.01.07 15:54
Sorry aber da geht was durcheinander!!!!!!!
Eine Zahl ist eine Anzahl oder eben eine Zahl (So viele Äpfel wie auf dem Marktstand liegen). Und dann gibt es die Repräsentationen einer Zahl anhand derer man die Wiedererkennen soll. Zum Beispiel ist 1200 die Zehnerrepräsentation einer großen Anzahl Äpfel.
Und ein Integer ist die duale Repräsentation einer Zahl begrenzt auf 32 Stellen (auf den meisten Architekturen). Leider wird das Wort meist falsch verwendet.
Eine Hexadezimal in einen Integer zu schreiben ist also prinzipiell unmöglich. Man kann ihn nur hexadezimal repräsentieren aber dazu braucht man Schrift also String.
|
|