char * zu double konvertieren

eeemoh

Mitglied
Hi Leute,

ich bin gerade dabei, mich unter C/C++ in Sockets einzuarbeiten, um ein kleines Serverprogramm zu schreiben, welches von einem .NET client Programm Daten geschickt bekommt. Die Daten bestehen zum Großteil aus double-Werten, die ich mit dem Bitconverter in Byte-Arrays konvertiere. in meinem Server-Programm will ich die Daten als char-Array auslesen und dann wieder in double konvertieren. Gibt es dazu eine Funktion, die das bewerkstelligt, oder muss ich das selber machen und wenn ja, wie sollte ich das am besten machen? Von einem byte[] (bzw. einem char[]) in einen int zu konvertieren wäre ja trivial, aber double bereitet mir da schon mehr kopfzerbrechen. Eine Idee, die ich hätte, wäre, mir einen Zeiger auf die Ziel double-Variable geben zu lassen, den dann als char * zu casten und dann die Daten in das jeweilige Feld zu schreiben. Würde das gehen? Ist das überhaupt empfehlenswert?

Vielen Dank im Voraus, Paul

Edit:
Hat sich erledigt, ich mache das jetzt mit den Pointern, funktioniert ganz gut. Falls jemand interessiert ist, geht ungefähr so:

Code:
char * buffer = 0;
int len = cReceive(&buffer); //Die Funktion will einen char **
double val = 0;

for(int i = 0; i<8; i++) //ich gehe hier der Einfachheit halber davon aus, dass mindestens 8 Bytes gelesen wurden und der Double sich am Anfang befindet
   ((char*)&val)[i] = buffer[i];
 
Zuletzt bearbeitet:
Hat sich erledigt, ich mache das jetzt mit den Pointern, funktioniert ganz gut. Falls jemand interessiert ist, geht ungefähr so:

Code:
char * buffer = 0;
int len = cReceive(&buffer); //Die Funktion will einen char **
double val = 0;

for(int i = 0; i<8; i++) //ich gehe hier der Einfachheit halber davon aus, dass mindestens 8 Bytes gelesen wurden und der Double sich am Anfang befindet
   ((char*)&val)[i] = buffer[i];
Die Schleife kann man auch einsparen, wenn man den buffer als double * reinterpretiert:
Code:
val = *((double *)buffer);
bzw.
Code:
val = *reinterpret_cast<double *>(buffer);
Allerdings sollte man hier auf eventuelle Unterschiede in der Endianess zwischen Client und Server aufpassen.

Grüße,
Matthias
 
Hi,

das mit der Endianess sollte kein Problem sein, weil ich beide Programme auf fast identischen Maschinen laufen lasse.

Ansonsten ist die Lösung natürlich sehr cool, danke :) Erspart mir noch ein bisschen An Schreibarbeit ...

Paul
 
Zurück