INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

HEX-String in Dezimal umwandeln



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!

24.11.2014, 13:44 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2014 14:05 von sumsi.)
Beitrag #1

sumsi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: Oct 2010

2014
2010
DE


Deutschland
HEX-String in Dezimal umwandeln
Hallo,

ich habe folgendes Problem:

Mein Gerät gibt mir einen HEX-String im IEEE-754 Format als Ergebnis zurück, welchen ich in eine Zahl zur weiteren Verrechnung umwandeln muss.
Dabei habe ich folgendes Format:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

Von Hand habe ich bereits eine Zahl umgewandelt, ich komme bei 39 B1 B0 EB auf ca. 5,28*10^-5.
In Labview habe ich dies noch nicht erreicht.
Dabei gehe ich folgendermaßen um:
Ich wander HEX in Binär um, für S ergibt sich ein positives Vorzeichen. Als Exponent E ergibt sich 114.
M rechne ich folgendermaßen um: 1. Bit * 1, 2. Bit mal 1/2, 3. Bit mal 1/4 usw.
Am Ende ergibt die Summe aus M*^(E-127) mein Ergebnis.

Um dies zu lösen habe ich schon einiges probiert, u.a. mit TypeCast in SGL umwandeln, Hexadezimalstring in Zahl, bin aber noch nicht auf das richtige Ergebnis gekommen. Habe auch schon einige Varianten aus dem Forum probiert, bis jetzt hat nichts geholfen.

Kann ich dies einfach lösen bzw. gibt es die möglichkeit meinen HEX-String in Binär zu wandeln, um daraus meinen Wert zu berechnen?

Schon mal vielen Dank

Sumsi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
24.11.2014, 14:53
Beitrag #2

macmarvin Offline
CLA
***


Beiträge: 445
Registriert seit: Sep 2006

2014
2004
EN

81373
Deutschland
RE: HEX-String in Dezimal umwandeln
Mal ins Blaue geraten... der HEX-String sollte als Zahl 0.000338919 ergeben?
Üblicherweise sind solche Umrechnungen immer Typecast/Unflatten Operationen. Dabei gibt's dann halt noch eine paar Eigenheiten bzgl. Stringdarstellung u./o. Endianess.
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.11.2014, 15:48
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: HEX-String in Dezimal umwandeln

Akzeptierte Lösung

Und hier als Typecast:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.11.2014, 09:14
Beitrag #4

sumsi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: Oct 2010

2014
2010
DE


Deutschland
RE: HEX-String in Dezimal umwandeln
Hallo,

ich habe mir jetzt mal eure Vorschläge angeschaut, erstelle ich mir diese in LabView so erhalte ich das gleiche Ergebnis wie macmarvin.

Inzwischen habe ich in meiner Berechnung per Hand noch einen Fehler gefunden, sodass ich für 39 1B B0 EB nun als Ergebnis ca. 1,48*10^-4 erhalte und für C1 48 00 00 ergibt sich -12,5. Die -12,5 kann ich mit der Umwandlung von GerdW nachfolziehen und erhalte auch diese als Ergebnis.

Nun habe ich mir ein kleiner Programm erstellt, welches mir einen Binär-Wert in String umwandelt und die entsprechenden Binärfolgen eingegeben.

für 39 1B ... erhalte ich mein von Hand gerechnetes Ergebnis von 1,48*10^-4
für C1 48 ... erhalte ich -12,5 (sowohl über Variante von GerdW und Handrechnung nachvollziehbar)

Wo liegt jetzt der Fehler? Bin ich zu blöd das ganze von Hand auszurechnen oder ist in meinem VI ein Fehler integriert? Falls ich mein VI nutzen möchte muss ich jedoch vorab meine HEX-Werte noch in Binärcode umwandeln. Wie geht dies?

Ich habe inzwischen gemerkt, dass die Mantisse nicht nur aus 23 Bits besteht sondern das als Bit 1 noch eine 1 hinzugefügt ist.

Kann mir jemand weiterhelfen? Steh grad irgendwie total auf der Leitung.

Vielen Dank


Angehängte Datei(en)
10.0 .vi  IEEE754toFloat.vi (Größe: 15,25 KB / Downloads: 362)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.11.2014, 09:26 (Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2014 09:55 von jg.)
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: HEX-String in Dezimal umwandeln
Wieso so umständlich?
Die Binärdarstellung einer Single-Float in LabVIEW erfolgt im IEEE-754 Format. Mit Typecast fährst du also viel einfacher...

Gruß, Jens
Ansonsten, mit einem Boolean-Array geht es besser als mit einem U16 Array:
   
Gruß, 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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.11.2014, 09:34
Beitrag #6

sumsi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: Oct 2010

2014
2010
DE


Deutschland
RE: HEX-String in Dezimal umwandeln
ok, hab inzwischen festgestellt, dass der Vorschlag von GerdW bestens funktionier. Hatte wohl irgendwo in der Eingabe meiner HEX-Abfolge einen Fehler.

Somit vielen Dank für die Hilfe, auch wenn ich etwas länger gebraucht hab um zu sehen dass es funktioniert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.11.2014, 10:32
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: HEX-String in Dezimal umwandeln
Hallo sumsi,

Zitat:Ich habe inzwischen gemerkt, dass die Mantisse nicht nur aus 23 Bits besteht sondern das als Bit 1 noch eine 1 hinzugefügt ist.
Für solche Erkenntnisse gibt es ja Standards (IEEE754) und prima Erläuterungen auf Wikipedia (Absatz zu "Normalisierte Zahl")…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.11.2014, 19:59 (Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2014 22:21 von Lucki.)
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: HEX-String in Dezimal umwandeln
Habe mir den Thread jetzt auch angeschaut. Aus rein schöngeistigem Interesse, es ist also gewissermaßen off-Toppic, habe ich die manuelle Konvertierung von #4, #5 so verschlimmbessert:
   
Das ist aber alles keine Konvertierung nach IEE754, sondern nur eine amateurhafte "Vorstudie" dazu. Denn die Sonderfälle (Überlauf, Unterlauf, NaN, Ínf, -Inf, 0, -0) gehören auch zur Norm und sind hier nicht mit implementiert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.04.2015, 15:17
Beitrag #9

sumsi Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 83
Registriert seit: Oct 2010

2014
2010
DE


Deutschland
RE: HEX-String in Dezimal umwandeln
So, bin gerade mal wieder an dieser Stelle am weiterbasteln und inzwischen auf ein neues Problem gestoßen.

Warum macht es einen Unterschied, ob ich meinen Hex-String als normalen String (in Hex-Darstellung) oder direkt als Hex-String (mit Zahl nach Hex-String erzeugt) an meinen Typecast anlege?

wenn ich z.B. 41A0 als normalen String angebe, erhalte ich 20 (gewünschtes Ergebnis), bei Hex-String 1,65081E-7 als Ergebnis? Was mache ich hier schon wieder falsch?

Schon mal Danke für Lösungsvarianten.

Sumsi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.04.2015, 15:22 (Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2015 15:23 von GerdW.)
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: HEX-String in Dezimal umwandeln
Hallo sumsi,

Zitat:Was mache ich hier schon wieder falsch?
Du hast noch nicht verstanden, wie Daten im Speicher abgelegt werden und wie sie interpretiert werden…

Zitat:Hex-String als normalen String (in Hex-Darstellung)
Dies würde ich nicht als "normalen String", sondern als "String in Hex-Darstellung" bezeichnen.

Zitat:direkt als Hex-String (mit Zahl nach Hex-String erzeugt)
Das wiederum ist ein "normaler String"…

Zitat:wenn ich z.B. 41A0 als normalen String angebe, erhalte ich 20 (gewünschtes Ergebnis), bei Hex-String 1,65081E-7 als Ergebnis?
Das muss also heißen:
wenn ich z.B. 41A0 als String in Hex-Darstellung angebe, erhalte ich 20 (gewünschtes Ergebnis), bei "normalem String" 1,65081E-7 als Ergebnis?
Das Problem ist: das Typecast erwartet eine bestimmte Abfolge von Daten, hier 4 Bytes, um sie in einen SGL umzuwandeln. Du musst diese 4 Bytes bereitstellen, und zwar so, wie es im Standard IEEE754/854 beschrieben wird!
Ob du diese 4 Bytes als U8-Array oder als String bereitstellst, ist dabei nebensächlich. Wichtig ist nur, dass es eben 4 Bytes mit den korrekten Datenwerten sind…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Dezimal-String nach Zahl Funktion ares2013 4 5.049 10.04.2019 13:12
Letzter Beitrag: jg
  Name Referenz von Hex in Dezimal voellig_egal 9 5.895 21.06.2018 14:31
Letzter Beitrag: voellig_egal
  String zu Number umwandeln galilio 6 6.530 01.09.2016 15:38
Letzter Beitrag: GerdW
  Problem Hexadezimal zu Dezimal Wandlung Fraser-Island 6 5.811 29.07.2015 10:34
Letzter Beitrag: Fraser-Island
  String zu Dezimal (1, 2 und 4 Byte) unsigned + Integer hansi9990 9 7.099 16.07.2015 14:25
Letzter Beitrag: hansi9990
  Flexible Präzision für Fließkommazahl in String umwandeln monoceros84 4 5.057 11.12.2014 15:04
Letzter Beitrag: monoceros84

Gehe zu: