16.05.2008, 14:02
(Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2008 14:09 von joe1234.)
Beitrag #1
|
joe1234
LVF-Gelegenheitsschreiber
Beiträge: 136
Registriert seit: Sep 2007
2010
2007
kA
Deutschland
|
Hex, dez zu floating point umwandeln
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
|
|
|
16.05.2008, 14:28
Beitrag #2
|
RoLe
LVF-Guru
Beiträge: 1.236
Registriert seit: Jul 2007
-
1997
en
0
Schweiz
|
Hex, dez zu floating point umwandeln
' schrieb: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.
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 <--(¯`·.
|
|
|
16.05.2008, 14:51
Beitrag #3
|
joe1234
LVF-Gelegenheitsschreiber
Beiträge: 136
Registriert seit: Sep 2007
2010
2007
kA
Deutschland
|
Hex, dez zu floating point umwandeln
' 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.)
Beitrag #4
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Hex, dez zu floating point umwandeln
' 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).
|
|
|
16.05.2008, 17:04
Beitrag #5
|
BerndDasBrot
LVF-Gelegenheitsschreiber
Beiträge: 128
Registriert seit: Feb 2008
8.2.1, 2012, 2017, 2020
2007
EN
7206
Schweiz
|
Hex, dez zu floating point umwandeln
' 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.)
Beitrag #6
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Hex, dez zu floating point umwandeln
' 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.
http://de.wikipedia.org/wiki/Gleitkommazahl
LabVIEW speichert eine Single Precision genauso:
Jetzt ist die Frage, wo kommt deine R32 her:
Aus einem (binärem) File, dann musst du nur das VI "Read from Binary File" nehmen.
Ansonsten per Type Cast wandeln (und es langt vollkommen, in SGL zu wandeln, mehr Info enthält deine R32 auch nicht):
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
19.05.2008, 12:27
Beitrag #7
|
joe1234
LVF-Gelegenheitsschreiber
Beiträge: 136
Registriert seit: Sep 2007
2010
2007
kA
Deutschland
|
Hex, dez zu floating point umwandeln
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.)
Beitrag #8
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Hex, dez zu floating point umwandeln
Die Vermutung von Jens kann ich nur bestätigen:
String to U32, dann Typkonvertierung zu SGL
|
|
|
21.05.2008, 10:44
Beitrag #9
|
joe1234
LVF-Gelegenheitsschreiber
Beiträge: 136
Registriert seit: Sep 2007
2010
2007
kA
Deutschland
|
Hex, dez zu floating point umwandeln
' schrieb:Die Vermutung von Jens kann ich nur bestätigen:
String to U32, dann Typkonvertierung zu SGL
[attachment=39829:HexToFloat.png]
Ich habe direkt eine I32-Zahl und dann Typenkonvertierung zu SGL.
Gruß Joe
|
|
|
21.05.2008, 13:16
(Dieser Beitrag wurde zuletzt bearbeitet: 21.05.2008 13:16 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Hex, dez zu floating point umwandeln
' schrieb:Ich habe direkt eine I32-Zahl und dann Typenkonvertierung zu SGL.
Heißt das jetzt, daß das Problem gelöst ist, oder daß wir hier noch mit verfeinerten Vorschlägen aufwarten sollen?
|
|
|
| |