Hallo,
ich bekomme über eine CAN Nachricht im 8 Byte langen Datenfeld einen
float Wert.
Ich möchte diesen gern in ein char[] speichern und mit printf ausgeben.
char puffer[100];
memcpy(puffer, can_dump_frame.data, sizeof(float));
printf("\t Value: %f \n",puffer);
So geht es aber nicht.
Was mache ich falsch?
ich habe jetzt folgendes probiert:
char puffer[100];
snprintf(puffer, 8, "%f",can_dump_frame.data);
printf("\t Value: %f \n",puffer);
Klappt nicht.
Wie erreiche ich eigentlich das in puffer jedes mal von vorn
reingeschrieben wird und nicht hinten dran?
> ich bekomme über eine CAN Nachricht im 8 Byte langen Datenfeld einen > float Wert. Und wie ist selbiger codiert?
Wie ist den can_dump_frame aufgebaut? Edit: Im übrigen versuchst du ein char (puffer) als float auszugeben. Da greifst du mal hübsch auf Speicherbereiche zu, die nicht zu dem char gehören und irgendwas drinstehen kann. Wenn du ein char-Array ausgeben willst, dann mit %s, aber sei dir BITTEBITTEBITTE sicher, dass am Ende des Strings ein "\0" zur Terminierung steht! Zur Ausgabe am besten den Artikel nochmal durchlesen: http://de.wikibooks.org/wiki/C-Programmierung:_Einfache_Ein-_und_Ausgabe (Insbesondere den ersten blauen Kasten mit den format-Elementen)
tugtug schrieb: > char puffer[100]; > > snprintf(puffer, 8, "%f",can_dump_frame.data); > printf("\t Value: %f \n",puffer); > > Klappt nicht. Ist %f der Formatspezifizierer für die Ausgabe von Zeichenketten? Warum überhaupt Deinen Puffer verwenden? Warum nicht gleich so? > printf("\t Value: %f \n", can_dump_frame.data);
tugtug schrieb: > Hallo, > > ich bekomme über eine CAN Nachricht im 8 Byte langen Datenfeld einen > float Wert. Nö. Du kriegst zuallererst mal 8 Bytes. Nicht mehr und nicht weniger. Das diese Bytes aus einem float stammen ist zwar nett und etwas, das du weißt, aber im Moment nocht uninteressant. Denn noch sind das einfach nur 8 Bytes. > > Ich möchte diesen gern in ein char[] speichern und mit printf ausgeben. Wozu? Wenn diese Bytes aus einem float stammen, dann möchtest du die doch auch in einem float speichern und nicht in einem char[]. Ausserdem: warum char[]? char[] ist für Strings und nicht für floats.
1 | float Wert; |
2 | |
3 | memcpy( &Wert, can_dump_frame.data, sizeof(float)); |
4 | printf("\t Value: %f \n", Wert); |
eventuell musst du beim memcpy noch die Adresse &Wert zurecht casten, damit sie memcpy akzeptiert. > So geht es aber nicht. > Was mache ich falsch? Du gehst unlogisch vor, überlegst dir nicht was du eigentlich wirklich willst und lässt dich von Compiler-Fehlermeldungen auf eine falsche Fährte locken. Kurz und gut: du hast dein C nicht ordentlich gelernt. Das ist das was du falsch machst.
tugtug schrieb: . > Was mache ich falsch? C programmieren wollen ohne dass Du Dich mit den grundlegenden Konzepten auseinandersetzt. Finde heraus, wie dein 8byte Float-Wert codiert ist, wandle ihn in irgendwas um, was mit % in Printf ausgegeben/formatiert werden kann und fertsch. Einfach 8Byte binär als Char ausgeben klappt nicht. Außer du gibst jedes Byte einzeln in der Art 0xFF aus - was aber auch wieder nur eine Interpretation der binären Daten darstellt (und ich nehme an Du willst den Float als 1.234567 anzeigen).
tugtug schrieb: > ich bekomme über eine CAN Nachricht im 8 Byte langen Datenfeld einen > float Wert. Hast Du den Code, wie der float-Wert in die CAN Nachricht abgelegt wurde? Wenn Du sagt, es geht nicht - Was bedeutet das? Die bereits gegebenen Antworten beziehen sich auf deine Codierung. Mit den Hinweise solltest Du eine Übersetzung hinbekommen. Oder bekommst Du einen falschen Wert? Dann müßtest Du meine Eingangsfrage beantwortet. Ein Beispiel hilft vermutlich auch für unser Verständnis.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.