Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
16.05.2008, 14:02 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2008 14:09 von joe1234.)
Hi,
hat jemand eine Idee wie man eine Hex-Zahl in eine Fließkommazahl umwandelt/darstellt?
Bsp:
42F66B85=
Sign Bit Exponent Field Significand
0 10000101 1 .11101100110101110000101
=123.21
Ich erhalte also einen Hex-Wert. Dieser ist ein REAL32-Wert, also ein floating point. Nun müsste ich das so umwandeln, dass ich einen Dezimal-Wert erhalte.
Also mich interessiert eigentlich nur der Dezimal-Wert.
Sign Bit Exponent Field Significand
0 10000101 1 .11101100110101110000101
=123.21
Ich erhalte also einen Hex-Wert. Dieser ist ein REAL32-Wert, also ein floating point. Nun müsste ich das so umwandeln, dass ich einen Dezimal-Wert erhalte.
Also mich interessiert eigentlich nur der Dezimal-Wert.
Wie erhälst du deinen Wert, als String?
Was soll da Resultat sein, ein SGL/DBL?
Ich verstehs nicht so ganz.
.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
' schrieb:Wie erhälst du deinen Wert, als String?
Was soll da Resultat sein, ein SGL/DBL?
Ich verstehs nicht so ganz.
Nein, ich erhalte den Wert als einen INT32 (REAL32)-Wert in hex. Nicht als Strung! Der Wert vom Format REAL32 besteht aus einem
Vorzeichen Bit (Sign Bit) -> Länge: 1 Bit
Exponenten (Exponent) -> Länge: 8 Bit
Mantisse (Field Significand) -> Länge: 23 Bit
insgesamt ist die Zahl 32 Bit lang. Nach der Umrechnung sollte es dann eine Kommazahl sein, also ein DBL-Wert.
16.05.2008, 16:27 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2008 16:29 von IchSelbst.)
' schrieb:Nein, ich erhalte den Wert als einen INT32 (REAL32)-Wert in hex.
HEX ist eine Darstellungsform, kein Speicherformat.
Int32 ist ein Speicherformat genauso wie R32. Beide unterscheiden sich. Du kannst also nicht sagen "ich erhalte den Wert als einen INT32 (REAL32)-Wert".
Int32 kann man darstellen als HEX, DEZ, BIN etc. Auch R32 kann man darstellen - als HEX, FLOAT, BIN etc.
Ein R32 ist 32 Bit lang, da hst du recht. Auch das Format (Länge von Vorzeichen, Exponent, Mantisse) ist bekannt (ich gehe davon aus, dass das, was du angegeben hast, der Standard ist)
Uns interessiert aber: Wo kommt der Wert her? Aus einer RS232, die dann einen String liefert? Oder ist die Zahl in einem Anzeige/Bedien-Element hinterlegt vom TYP INT32, TYP SINGLE? Beachte hier "TYP"!
Also: Wie ist die Zahl gespeichert? Bedenke: HEX ist kein Speicherformat (genauso wenig wie ASCII, EBDCI etc.). Int32, Single (R32), Double (R64), String etc sind Speicherformate.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Hi,
hat jemand eine Idee wie man eine Hex-Zahl in eine Fließkommazahl umwandelt/darstellt?
Bsp:
42F66B85=
Sign Bit Exponent Field Significand
0 10000101 1 .11101100110101110000101
=123.21
Ich erhalte also einen Hex-Wert. Dieser ist ein REAL32-Wert, also ein floating point. Nun müsste ich das so umwandeln, dass ich einen Dezimal-Wert erhalte.
Also mich interessiert eigentlich nur der Dezimal-Wert.
Gruß Joe
Hallo Joe
Kann man nicht einfach mit rechter Maustaste->Properties->Format and Precision das Format von Hexadecimal auf Floating point umschalten?
Oder habe ich Dich nicht richtig verstanden?
BDB
16.05.2008, 17:45 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2008 17:45 von jg.)
' schrieb:Nein, ich erhalte den Wert als einen INT32 (REAL32)-Wert in hex. Nicht als Strung! Der Wert vom Format REAL32 besteht aus einem
Vorzeichen Bit (Sign Bit) -> Länge: 1 Bit
Exponenten (Exponent) -> Länge: 8 Bit
Mantisse (Field Significand) -> Länge: 23 Bit
insgesamt ist die Zahl 32 Bit lang. Nach der Umrechnung sollte es dann eine Kommazahl sein, also ein DBL-Wert.
Das hört sich sehr nach dem internen (binärem) Speicherformat eine Single Precision Float nach IEEE an.
Hi,
ich danke euch allen für die Antworten bzw. Fragen. Erstmal einige Erläuterungen:
Wo kommt die Zahl her?
Die Zahl wird soll eine Temperatur darstellen und wird von einer Platine mit einem USB-to-CAN (Marke: IXXAT) ausgelesen. Zu diesem USB-to-CAN gibt es schon ein Beispielprog. im Netz. Dabei sieht die Anzeige so aus:
Wie man sieht, gibt der USB-to-CAN im Feld "Data" Werte als Hex aus. Diese sind alle vom TYP U16. Da es insgesamt 8 Byte
(8x1 Byte) sind und ich nur die ersten 4 Byte nutzen möchte, fasse ich die 4x1 Byte zu einer Zahl (32 Bit = 4 Byte) zusammen. Nun gibt mir diese Zahl eine Temperatur, sowie Jens es beschrieben hat, an.
Und tatsächlich mit dem Symbol "Typenumformung" lässt sich die Zahl als in eine Dezimalzahl umformen.
Ich hoffe, dass es jetzt mehr verständlich ist und Sorry für die schlechte Erklärung am Anfang des Threads.
Gruß Joe
19.05.2008, 16:43 (Dieser Beitrag wurde zuletzt bearbeitet: 19.05.2008 16:46 von Lucki.)