# Konvertierung eines 8Byte unsigned Char Array in einen double Wert



## torsch2711 (14. Dezember 2004)

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


----------



## Endurion (14. Dezember 2004)

Ä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:


```
char    cCharArray[8];

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

double    dValue = *(double*)cCharArray;
```

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


```
char cCharArray[8];

double dValue = atof( cCharArray );
```


----------



## torsch2711 (14. Dezember 2004)

Letzteres, 

atof hab ich auch schon herausgefunden, ich hätte gerne nur den algorithmus der umrechnung gewusst, das ist alles


----------



## Kachelator (14. Dezember 2004)

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...


----------



## torsch2711 (14. Dezember 2004)

Also, ich lese eine Binäre Datei, byteweise ein. (8bit).

in dem Array stehen diese als binärwerte.


----------



## Kachelator (14. Dezember 2004)

Also handelt es sich um 8 mal 8 Bit für eine 64 -Bit-Ganzzahl?


----------



## torsch2711 (14. Dezember 2004)

Jep, korrekt!

Edit:

Okay, ein kurze korrektur:

es handelt sich um eine 8 mal 8 bit Gleitkommazahl!


----------



## Kachelator (14. Dezember 2004)

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:

```
char    cCharArray[8];

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

double    dValue = *(double*)cCharArray;
```


----------



## torsch2711 (14. Dezember 2004)

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


----------



## Endurion (15. Dezember 2004)

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.


----------



## torsch2711 (16. Dezember 2004)

Danke Endurion,

genau so etwas in dieser Richtung hab ich gesucht! 
Den Algorithmus und nicht das Funktionen welche das machen! 

Vielen Dank, damit kann ich diesen Thread als abgehackt ansehen! 

Grüsse
Torsten


----------

