double in char verwandeln
-
Hallo Leute,
ich hätte gern eine 64-bit-Zahl in einen 8-byte Array von chars, welche die binäre Entsprechung hält.
Also ich will nicht die Zahl stupide in einen String verwandeln (sprintf).
Das ist mein Ansatz:
void ConvertDoubleString(unsigned char* buffer, double zahl) { double k; int i=7; while(i>=0) { k = zahl % 256; buffer[i] = k; zahl = zahl-k*256; i--; } buffer[0]=zahl; }
Der Compiler meckert aber
invalid operands to binary %
.
Wo liegt denn mein Fehler? Danke schonmal,
Günther
-
Der %-Operator ist für doubles nicht definiert. Du könntest es mit fmod probieren, aber im Endeffekt wird sprintf die bessere Lösung sein.
-
Und wenn du wirklich die Binärdarstellung von double haben willst, ist das sowieso der falsche Weg (double's werden in halblogarithmischer Darstellung als b*2e gespeichert) - das könntest du z.B. über reinterpret_cast<> (bzw in C über "normale" Typcast's) umwandeln:
memcpy(buffer,(void*)&zahl,sizeof(double));
-
Daniel E. schrieb:
Der %-Operator ist für doubles nicht definiert. Du könntest es mit fmod probieren, aber im Endeffekt wird sprintf die bessere Lösung sein.
Sprintf funktioniert aber nicht in meinem Fall. Ich will nicht die 300 Stellen der Zahl in einen 300-Stellen Array überführen, sondern
zahl=1000 -> buffer={0x03, 0xE8}
Günther
-
willst nur ganze zahlen (obwohl du double benutzt)?
dann caste dein 'double' nach '__int64' oder 'long long'
und dann mach's so ähnlich wie CStoll vorgeschlagen hat...
-
Huch, sorry.
Ich dachte, double ist ein 64bit int. Mein Fehler.
Das Beispielt von cstoll funktioniert gut, nur dass das LSByte zuerst kommt.
Danke.
Günther
-
Guenther schrieb:
Ich dachte, double ist ein 64bit int. Mein Fehler.
Im Zweifelsfall sollte man halt lieber nachsehen als 'denken'
Das Beispielt von cstoll funktioniert gut, nur dass das LSByte zuerst kommt.
Tja, in der Reihenfolge steht offenbar dein double im Speicher.