hex -> dez
-
Hi,
das Beispiel funktioniert perfekt.
Aber gibt es die Möglichkeit auch für float, double?Gruß Ross
-
Hallo,
Eine float-Zahl in hex zu konvertieren ist doch irgendwie sinnlos. Wozu brauchst du den das?
-
Ich habe eine Datei, in welcher in hex Messergebnisse gespeichert sind:
z.B.: 0x40C4FE22
Dies habe ich als String vorliegen und möchte das ganze nun als float haben.
(Das ganze auch für double)Gruß
-
balduin schrieb:
Ich habe eine Datei, in welcher in hex Messergebnisse gespeichert sind:
z.B.: 0x40C4FE22
Dies habe ich als String vorliegen und möchte das ganze nun als float haben.
(Das ganze auch für double)Gruß
(6.156022) wäre hier die Lösung
-
balduin schrieb:
balduin schrieb:
Ich habe eine Datei, in welcher in hex Messergebnisse gespeichert sind:
z.B.: 0x40C4FE22
Dies habe ich als String vorliegen und möchte das ganze nun als float haben.
(Das ganze auch für double)Gruß
(6.156022) wäre hier die Lösung
Ähhhh Du sprichst jetzt aber nicht mehr von einer "hex->dez"-Umwandlung, sondern die Umdeutung einer internen Speicherrepräsentation, oder ?
Da bietet der Standard natürlich nichst Generelles an ... aber wenn Du auf derselben Plattform arbeitest, kannst Du diese Bytes in einem char-Array ablegen und mittels reinterpret_cast umbiegen.... aber wie gesagt: Dazu muss die interne Darstellung übereinstimmen.BTW: Welcher /&=%&"*# kam denn auf die Idee, die floats direkt mit fwrite() wegzuschreiben ?
Gruß,
Simon2.
-
Eigentlich will ich nur die selbe Operation wie hier:
http://www.h-schmidt.net/FloatApplet/IEEE754de.html
durchführen.
Also von der Hexadecimal representation in die Decimal representation wandeln.
-
balduin schrieb:
Eigentlich will ich nur die selbe Operation wie hier:
http://www.h-schmidt.net/FloatApplet/IEEE754de.html
durchführen.
Also von der Hexadecimal representation in die Decimal representation wandeln.Habt ihr mein Problem soweit verstanden?
-
balduin schrieb:
Habt ihr mein Problem soweit verstanden?
Ja. Aber offenbar hast du Simon2s Lösung nicht verstanden.
-
balduin schrieb:
Eigentlich will ich nur die selbe Operation wie hier:
http://www.h-schmidt.net/FloatApplet/IEEE754de.html
durchführen.
Also von der Hexadecimal representation in die Decimal representation wandeln.Hi,
" ...den von modernen CPUs verwendeten IEEE 754-Fließkommazahlen ..."
=> direkte cast-Lösung funktioniert nur auf bestimmten Plattformen (auf nicht-IEEE-Plattformen eben nicht).
Insgesamt scheint es mir da für Dich deutlich einfacher, wenn Du den beschriebenen Umrechnungsalgorithmus umsetzt .... oder (IMO noch einfacher, falls möglich) ein simpleres Protokoll verwendest.
Gruß,
Simon2.
P.S.: Ich bin mir nicht ganz sicher, ob in o.g. Dokument bei 0 oder bei 1 angefangen wird zu zählen.
-
MFK schrieb:
balduin schrieb:
Habt ihr mein Problem soweit verstanden?
Ja. Aber offenbar hast du Simon2s Lösung nicht verstanden.
Ok, das bestreite ich nicht.
Hat jemand einen Beispielcode?
System: Win2000
little endian format.
Darstellung nach IEEE754 (single und double).Als char Array habe ich alles schon vorliegen.
Danke für uere Hilfe.
-
unsigned char a[] = "\x93\x18\xec\x40"; float* pf = reinterpret_cast<float*>(a); cout << *pf << "\n";Gruß,
Simon2.
-
Simon2 schrieb:
unsigned char a[] = "\x93\x18\xec\x40"; float* pf = reinterpret_cast<float*>(a); cout << *pf << "\n";Gruß,
Simon2.
Danke Simon2
Nun habe sogar ich verstanden wie das gemeint war und dabei ist heute nichteinmal Freitag
-
Bei float könnte man auch normal über int gehen.
// rausschreiben ofstream otest("Test.txt"); float f = 20.5; int itemp = *(reinterpret_cast<int*>(&f)); otest << hex << itemp; otest.close(); // Einlesen ifstream itest("Test.txt"); int iein; itest >> hex >> iein; float fein = *(reinterpret_cast<float*>(&iein));Bei double braucht man aber einen 64Bit-Ganzzahltypen (__int64 z.Bsp.)
-
Also ich hab nicht geprüft, was die anderen hier vorschlagen.
Durchdenk das mal.
#include <string> #include <sstream> union f754 { int a; float b; }; int main() { using namespace std; string str("0x7ff"); istringstream istr(str); f754 x; istr >> hex >> x.a; float result = x.b; }PS was double angeht, C++ kennt kein long long, bekommt man aber auch hin (halt double splitten).