float in char

Gast #3359836
Lesenswert?

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?
Gast #3359881
Lesenswert?

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?
#3359905
Lesenswert?

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)
#3360163
Lesenswert?

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.
#3360167
Lesenswert?

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).
#3360233
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren