![]() |
Dec to Hex
Hallo,
Ich suche eine Delphi Funktion die einen Dezimal Wert nach Hex wandelt. (Mit Nachkommastellen!!) Da kann mir InttoHex leider nicht helfen. Danke |
Re: Dec to Hex
Hallo, meinst du
![]() |
Re: Dec to Hex
Hallo,
Ich benutze auch Delphi 7 aber die Funktion wird nichtgefunden. Brauche ich eine bestimmte Bibliothek? Danke schonmal |
Re: Dec to Hex
Ist nicht Dein Ernst, oder? ;)
Steht doch alles im Link. Sherlock |
Re: Dec to Hex
Vielleicht so in etwa? (schnell reingehämmert, ungetestet:)
Delphi-Quellcode:
FloatToHex müsstest du dir von der Internetseite kopieren. Das ist nämlich nur ein Vorschlag es in die RTL zu integrieren. Aber wozu braucht man das überhaupt? :gruebel:
Result:=IntToHex(Trunc(X))+','+IntToHex(Round(Trunc((X-Trunc(X))*Power(10,Y)))); // N = Anzahl Nachkommastallen
|
Re: Dec to Hex
ja war mein fehler, hab die funktion aus dem Link nun auch probiert, aber die liefert mir ziemlich falsche Werte. Funktioniert die bei euch?
|
Re: Dec to Hex
Ja, sie funktioniert. Aber bist du dir sicher, dass du verstehst wie sie funktioniert?
|
Re: Dec to Hex
Eher nicht, könntest du sie vielleicht kurz erklären?
|
Re: Dec to Hex
Delphi-Quellcode:
Label1.Caption := FloatToHex(123.344)
Delphi-Quellcode:
function FloatToHex(const x: double): string;
type tBA = array [0..SizeOf(x)-1] of byte; var Buf: tBA; i: integer; begin For i := 0 to high(tBA) do Buf[high(tBA)-i] := tBA(x)[i]; If (Buf[0] and $80) = 0 {Modif 2007-08-18 by JFH} then Buf[0] := Buf[0] xor $80 else for i := 0 to high(tBA) do Buf[i] := not Buf[i]; SetLength(Result,SizeOf(Buf)*2); BinToHex(@Buf,PChar(Result),SizeOf(Buf)); end; |
Re: Dec to Hex
Hallo toms,
Genau das habe ich auch probiert und dann kommt als Lösung C05ED604189374BC Wenn ich das in den Windows Rechner schmeisse liefert der mir eine enorm hohe Zahl. Ich denke ich mache da was mit dem Komma falsch. oder? |
Re: Dec to Hex
Ich vermute, du suchst eher soetwas:
Delphi-Quellcode:
Die FloatToHex-Routine aus dem Vorschlag oben ist eher geeignet eine Gleitkommazahl eben nicht im Binär-, sondern im Textformat mit Hexzeichen zu speichern. Als Mensch ist man beim Lesen aber nicht schlauer. Und ehrlich, gesagt frage ich mich immernoch wozu man sowohl das eine oder noch andere braucht...
uses
SysUtils, Math; function FloatToHex(const X: Double; const Digits, N: Integer): String; begin Result:=IntToHex(Trunc(X),Digits)+','+IntToHex(Round((X-Trunc(X))*Power(10,N)),N); end; |
Re: Dec to Hex
Zitat:
|
Re: Dec to Hex
Hallo,
den Namen FloatToHex() hat John Herbster etwas unglücklich gewählt - finde ich. Er liefert einfach eine sortierfähige Hex-Darstellung eines Float-Wertes, gesucht wird hier aber wohl ein Analogon zu FloatToStr(), wobei die Ausgabe zur Basis 16 anstelle zu Basis 10 erfolgen soll.
Delphi-Quellcode:
Grüße vom marabu
function FracToHex(value: Double): string;
const HEX_DIGIT = '0123456789ABCDEF'; begin Result := ''; repeat value := Frac(value) * 16; Result := Result + HEX_DIGIT[Succ(Trunc(value))]; until IsZero(value); end; function FloatToHex(d: Double): string; begin Result := Format('%x%s%s', [Trunc(d), DecimalSeparator, FracToHex(d)]); end; |
Re: Dec to Hex
Nach welcher Norm werden denn hier die Gleitkommazahlen umgewandelt? Ist das IEE?
Sieht für mich eigentlich nicht unbedingt so aus. Wozu soll das dann gut sein? Edit: Und hier noch geschwind ein Link zum Thema IEE ![]() Da in dem Artikel ein Algorithmus gezeigt, wird, wie die Umwandlung stattfindet, ist das ja auch ein brauchbarer Ansatz die Sache richtig zu machen. Sherlock |
Re: Dec to Hex
Hallo Sherlock,
deine Fragen richten sich wohl nicht an mich, sonst hättest du mich bestimmt adressiert. Trotzdem eine Bemerkung von mir: Es geht hier um ein mathematisches Problem. Die Umsetzung mathematischer Gesetze in der Digitaltechnik und ihre Normung durch das IEEE spielen da nur am Rande eine Rolle. Speziell die Konvertierung zwischen Zahlsystemen lässt sich mit Stift und Papier nach Regeln durchführen, die älter als das IEEE sind. Freundliche Grüße |
Re: Dec to Hex
Hallo Marabu,
richtig, ich habe Dich nicht angesprochen :) Ich wollte halt hören, wie die Hausaufgabe genauer formuliert ist. ;) Sherlock |
Re: Dec to Hex
An eine Hausaufgabe als mögliche Motivation für diesen Thread habe ich nicht gedacht.
Nur gut, dass ich die Vorzeichenbehandlung weggelassen habe. |
Re: Dec to Hex
Zitat:
logisch, die mathemathischen Gesetze sind ewigwährend, auch die, die der Mensch noch nicht gefunden hat - diese tiefgreifende Erkenntnis hilft aber beim Programmieren garnicht weiter. Falls man mit einer umgewandelten Zahl noch irgendetwas Sinnvolles anfangen will, ist es schon sehr hilfreich, Normen zu beachten, eine Zahl in Gleitkommadarstellung kann eben nur wieder gelesen werden, wenn man den Aufbau von Vorzeichen, Exponent und Mantisse kennt. Auch die verschiedenen manuellen Schreibweisen sind nur vereinbarte Kodierungen (und nicht die "Zahl selbst", wers nicht glaubt, soll Pi hinschreiben). Gruss Reinhard |
Re: Dec to Hex
Hallo Reinhard,
Zitat:
Freundliche Grüße |
Re: Dec to Hex
Hallo,
Ähh ich erkläre mal kurz wozu die Umrechnung. Und zwar lese ich aus einer Excel-Tabelle Werte aus und gebe die über Ethernet-Schnittstelle an ein Gerät weiter. Die Funktion (die nicht ich geschrieben habe) um Werte an das Gerät zu senden, nimmt nur HEX Werte an. |
Re: Dec to Hex
Mit Komma? Was sagt denn die Dokumentation zur Funktion wie diese Hex-Wert aussehen müssen!?
|
Re: Dec to Hex
Zum Beispiel:
$020003BA |
Re: Dec to Hex
Zitat:
Sherlock |
Re: Dec to Hex
Zitat:
|
Re: Dec to Hex
Menno, zeig doch bitte ein Beispiel mit Nachkommastellen :D
Sherlock |
Re: Dec to Hex
Also hier habe ich ein Beispiel:
115.3 in Dezimal ergibt 73,4CC in HEX ![]() Hier wäre so ein Onlinerechner der das kann |
Re: Dec to Hex
Mesch, da wird doch alles erklärt... Es gibt vielleicht keine vorgefertigte Funktion, aber die Internetseite erklärt doch wirklich alle Details. Dann schreib' dir doch eine Funktion FloatToHex, welche die genannten Schritte implementiert. Da ist wirklich keine große Mystik dabei.
|
Re: Dec to Hex
rich123, die Frage ist doch aber, ob diese Repräsentation einer Gleitkommazahl auch wirklich dem entspricht, was die Gegenstelle erwartet. Ist das so?
Sherlock |
Re: Dec to Hex
Hallo zusammen,
Erstmal will ich mich bei allen bedanken. Ich habe das jetzt auf eine andere Art und Weise gelöst. Und zwar Runde ich die Float Zahl und danach mach ich eine Int daraus. Dann gehts ganz einfach mit der InttoHex. Das ist in meinem Fall genau genug. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz