char buffer in Float-Variable speichern
-
Hallo zusammen,
ich bekomme über einen Bus 4 Bytes in einem Buffer geliefert. Diese repräsentieren eine Float-Zahl. Ich möchte diese 4 Bytes wieder in einer Variable vom Typ Float speichern. Wäre es eine Ganzzahl, würde folgendes funktionieren:
long zahl = buffer[0] + (buffer[1] <<
+ (buffer [2] << 16) + (buffer[3] << 24);
Für Floatzahlen funktioniert das so leider nicht. Der Compiler (gcc) meckert. (Falls das wichtig ist: ich arbeite mit Linux).
Kann mir hier jemand einen Trick verraten, wie das trotzdem geht? Habe auch schon so was probiert:
char * char_ptr = &Float_Zahl
*char_ptr = buffer[0];
*(char_ptr++) = buffer[1];
*(char_ptr++) = buffer[2];
*(char_ptr++) = buffer[3];hier stört sich zwar der Compiler nicht dran, aber Float_Zahl hat danach den Wert 0. Für mich nicht nachvollziehbar. Für Euch? Bin um jede Hilfe dankbar!
Viele Grüße,
bierbauch
-
1. Hast du Endian-ness beachtet?
2. Dein Code enthält Fehler:char * char_ptr = &Float_Zahl *char_ptr = buffer[0]; *(char_ptr++) = buffer[1]; // Fehler!!! *(char_ptr++) = buffer[2]; *(char_ptr++) = buffer[3];
Zuerst wird nämlich der Wert von char_ptr (die Adresse, auf die es zeigt genommen), dereferenziert und in die Adresse, auf die char_ptr zeigt, der Wert reingeschrieben, ANSCHLIESSEND dann char_ptr um 1 erhöht.
Wenn du dich nicht mit C auskennst, dann mach bitte keine solchen Spielereien, sondern schreib einfach ordentlich die Zeile mit Fehler (und die 2 folgenden) stattdessen so, wie es sich für Anfänger gehört:
char_ptr++; *char_ptr = buffer[1];
Wenn du dann den Unterschied zwischen Pre- und Postinkrement in einer fernen Zukunft verstanden hast, dann (aber erst dann!), darfst du es folgendermaßen schreiben:
*(++char_ptr) = buffer[1];