Konvertierung eines 8Byte unsigned Char Array in einen double Wert

torsch2711

Erfahrenes Mitglied
Hallo alle zusammen,

ich hab mal eine Frage bzgl. der Umrechnung eines 8 byte grossen unsigned Char-Arrays
in einen double-Value.

Einfaches Bit-Shifting funktioniert ja nicht, da man Exponent und Mantisse berücksichtigen muss.

Weiss jemand wie das noch funktioniert?


Grüsse

Torsten
 
Äh, wie ist das denn im char-Array gespeichert? Ist da das double einfach im selben Speicherbereich oder ist die Zahl als String gespeichert?

Bei A, gleicher Speicherbereich, ist das nicht mehr umwandeln, sondern einfach casten:

Code:
char    cCharArray[8];

... cCharArray mit Wert füllen...

double    dValue = *(double*)cCharArray;

bei B, einem String, der in ein double umgewandelt werden soll:

Code:
char cCharArray[8];

double dValue = atof( cCharArray );
 
Was steht denn drin in dem char-Array? Sind das acht Dezimalziffern oder handelt es sich um ein 64-Bit-Integer oder was?

---------
Ups, Endurion war schneller... :)
 
Jep, korrekt!

Edit:

Okay, ein kurze korrektur:

es handelt sich um eine 8 mal 8 bit Gleitkommazahl! ;)
 
Zuletzt bearbeitet:
Irgendwie reden wir aneinander vorbei. Eine 8x8Bit (== 8Byte) Fliesskommazahl ist etwas, das man auch als Double bezeichnet.
Da sollte Casting ausreichen.

Ich poste hier noch einmal Endurions Lösung:
Code:
char    cCharArray[8];

... cCharArray mit Wert füllen...

double    dValue = *(double*)cCharArray;
 
Ich gebs auf! :(

Was ich einfach nur wissen wollte ist die tatsächlich umrechen prozedur (), wie man aus einer Bit-Darstellung eine Fliesskommazahl berechnet mit Exponent und mantisse! (Hatte ich in meinem Post aber geschrieben!) Nicht wie ich den Wert einfach erhalte.

Ich wollte dies unter C realisieren. Naja, egal.

zuhause fliegt garantiert noch ein altes Vorlesungsskript von mir rum, das steht das bestimmt drin.

Bis denne.

Ciaoi

Torsten
 
Einen der möglichen tatsächlichen Algorithmen kannst du hier einsehen.

Under VS7.1 wird je nach Single oder Multithreaded eine Unterroutine _fltin oder _fltin2 aufgerufen, wie die aussieht, weiss ich aber nicht.
 
Zurück