Hallo zusammen, ich habe eine nicht schlaue Frage, und zwar wie ich 4 Rx_data[2],Rx_data[3],Rx_data[4] und Rx_data[5] zusammenpacken kann und dann diese zu float umwandeln. Die Daten werden über eine serielle via Python gesendet. atof habe ich auch probiert. Die ASIC-Daten im Bild sollten 55.55 entsprechen. vielen Dank im Voraus
Gast
#6016234
das ist eine in Python, aber ich brauche die Lösung in C
Gast
#6016242
also im Prinzip so:
1 | |
2 | |
3 | |
Gast
#6016243
Mark S. schrieb: > das ist eine in Python, aber ich brauche die Lösung in C Stand ja auch in deinem Eingangsbeitrag.
Gast
#6016244
ah. ok. dann schreib das doch.
Gast
#6016246
Mark S. schrieb: > und zwar wie ich 4 > Rx_data[2],Rx_data[3],Rx_data[4] und Rx_data[5] zusammenpacken kann und > dann diese zu float umwandeln. https://de.wikipedia.org/wiki/IEEE_754 Du suchst also "single" float. leo
Gast
#6016248
in C geht das mit ner Union:
1 | |
2 | |
3 | |
4 | |
5 | |
Gast
#6016250
bzw als Byte-Array:
1 | |
2 | |
3 | |
4 | |
5 | |
einfach auf b[] schreiben und f lesen.
Gast
#6016284
Mark S. schrieb: > wie ich 4 Rx_data[2],Rx_data[3],Rx_data[4] und Rx_data[5] zusammenpacken > kann und dann diese zu float umwandeln. Wieso willst du da etwas umwandeln. Du musst die 4 Byte doch nur als float interpretieren. Das funktioniert allerdings nur, wenn Absender- und Empfängerrechner das selbe 4-Byte Float Format verwenden.
Gast
#6016317
>das selbe 4-Byte Float Format
ist IEEE-754.
Bei1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
kommt f=55.5499992 raus.
Gast
#6016431
Jups schrieb: >>das selbe 4-Byte Float Format > ist IEEE-754. Du wolltest sagen, die gesendeten Bytes sind IEEE-754, oder woher kennst du die Erwartungshaltung des Empfängers? Der Compiler des Empfängers muss der selben Meinung sein und die selbe Endianness erwarten.
Gast
#6016457
Mark S. schrieb: > Asci oder Mark S. schrieb: > ASIC Oder doch eher ASCII? Gruss Chregu
Christian M. schrieb: > Oder doch eher ASCII? ASCII sorry
ich bekomme error, nähmlich expected identifier or '('. was bedeutet das
?
Gast
#6016771
Die Fehlermeldung sagt eigentlich glaskklar, was das Problem ist. bf_4 ist ein Typname und keine Variable.
und wie kann ich das lösen ?
Mark S. schrieb: > und wie kann ich das lösen ? Indem Du erstmal eine Variable vom Typ b4_f anlegst. Dann kannst Du die Inhalte der angelegten Variablen beschreiben.
Gast
#6016780
Ich schlage vor Du liest in Deinem C-Buch nochmal die Kapitel über Variablen und deren Typen sowie über Typdefinitionen. Dann überlegst Du Dir, was der Unterschied ist. Daraus müsste sich die Maßnahme eigentlich selbst ergeben. Offen gesagt, wenn Dir an dieser Stelle nicht wenigstens ungefähr klar ist, was das Problem ist, dann ist Lektüre und üben, die beste Medizin.
Gast
#6016781
Mark S. schrieb: > und wie kann ich das lösen ? Einfach Code vergleichen (siehe Code oben von Jups):
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Du brauchst einen Variable. Ein Typ alleine reicht nicht.
Mark S. schrieb: > nähmlich wer nämlich mit h schreibt ist d...
Gast
#6016787
Eine kleine, rethorische Frage, die vielleicht etwas weiter hilft: Warum schreibst Du in einem Programm nicht
1 | |
2 | |
3 | |
Gast
#6016791
Ich bin dämlich. Ich schreibe "nämlich" nämlich immer mit 'h'. :-)
Kochschlumpf schrieb: > Warum schreibst Du in einem Programm nicht ok es gibt ja keine Variablen. Ich habe noch nie mit typen gearbeitet. Deswegen habe ich nach Hilfe gefragt
Also ASCII{0x33,0x33,05e,042} ist aus meiner Sicht "33^B" waqs als Float
nicht wirklich Sinn macht?
Welchen Wert soll deine daraus resultierende Float haben?
Peter S. schrieb: > Also ASCII{0x33,0x33,05e,042} ist aus meiner Sicht "33^B" waqs als Float > nicht wirklich Sinn macht? > > Welchen Wert soll deine daraus resultierende Float haben? Nein, die Umwandlung geschieht nicht so. Es werden die Bitmuster interpretiert und diese ergeben nach IEEE 754 eine Gleitkommazahl.
ok ich habe versucht einen Variable von Typ b4_f anzulegen, aber zeigt immer noch einen Error
Gast
#6016814
Mark S. schrieb: > Kochschlumpf schrieb: >> Warum schreibst Du in einem Programm nicht > > ok es gibt ja keine Variablen. Ich habe noch nie mit typen gearbeitet. > [...] Ich denke, Du übersiehst da Etwas, beziehungsweise Du übersiehst das Maß der Bedeutung einer Sache, die Du an sich schon kennst. Du ziemlich sicher schon geschrieben:
1 | |
2 | |
3 | |
Damit hast Du schon mit Typen gearbeitet. Oder? Was Du im Moment vermutlich gerade wahrzunehmen beginnst ist, dass diese "Namen" wie "a" für eine Variable und Typnamen wie "int" aber auch selbstdefinierte Typen streng unterschieden werden müssen. Und zwar in Hinsicht darauf, dass sie verschiedene Dinge meinen, nämlich "Variablen" und "Typen" und das der tiefere Sinn dahinter einerseits mit der "Definition" von Speicher als auch mit der Festlegung von Operationen zu tun hat. int und char sind z.B. in der Regel verschieden groß. float und int erzeugen ganz verschiedene Operationen wenn Du etwa zwei Float-Zahlen addierst oder zwei Int-Zahlen. Deswegen muuss man genau darauf achten, was man mit einem Namen eigentlich "bezeichnen" will (Dt. "Bezeichner" = En. "Identifier"). Es gibt - und das steht in einem C-Buch) Bezeichner für Typen (wie char oder auch selbst beschriebene Typen) und Bezeichner von Variablen.
Gast
#6016815
Peter S. schrieb: > Also ASCII{0x33,0x33,05e,042} ist aus meiner Sicht "33^B" waqs als Float > nicht wirklich Sinn macht? > > Welchen Wert soll deine daraus resultierende Float haben? Mark S. schrieb: > Die ASIC-Daten im Bild sollten 55.55 entsprechen.
Gast
#6016818
Im Anhang ist der Screenshot nach der Abarbeitung des Codes von Jups. Entweder ist Mark ein Troll oder ein Ignorant.
Mark S. schrieb: > ich bekomme error, nähmlich expected identifier or '('. was bedeutet das > ? Im gezeigten Codeschnipsel ist fälschlicherweise ein Semikolon hinter "float f".
Gast
#6016826
Mark S. schrieb: > ich bekomme error, nähmlich expected identifier or '('. was bedeutet das > ? Dein Compiler ist ein C-Compiler. Bei den Fehlermeldungen musst du dir angewöhnen, drei mal um die Ecke zu denken, bevor du beim eigentlichen Problem an kommst. Die Zeichenfolge "; =" versteht der einfach nicht und verrennt sich in der Welt der Fehlinterpretationen.
Wolfgang schrieb: > Die Zeichenfolge "; =" versteht der einfach nicht und verrennt sich in > der Welt der Fehlinterpretationen. Der gemeinte Fehler ist in Zeile 75 (der in Zeile 79 kommt noch dazu) Der Compiler möchte nach der Zeichenkette b4_f entweder eine '(' (dann wäre es eine Funktionsdeklaration/definition vom impliziten Typ int) oder einen Identifier (dann wäre es eine Variablendefinition vom Typ b4_t).
Gast
#6016968
Au weia. Mark S. schrieb: > 4 Rx_data[2],Rx_data[3],Rx_data[4] und Rx_data[5] > Asci Das ist nicht ASCII, sondern das sind 4 bytes einer float Zahl im IEEE 754 Binärformat. 55.55 in ASCII wäre 0x35 0x35 0x2E 0x35 0x35 Mark S. schrieb: > Die Daten werden über eine serielle via Python gesendet. Mark S. schrieb: > aber ich brauche die Lösung in C Schau an. Das wusstest du bei deiner Frage natürlich noch nicht. Mark S. schrieb: > ok ich habe versucht einen Variable von Typ b4_f anzulegen What schrieb: > union > { > float f; > uint8_t b[4]; > } b4_f; Du hast einen Typ definiert, keine Variable angelegt. What schrieb: > Entweder ist Mark ein Troll oder ein Ignorant. Selten so jemanden erlebt, der so wenig Plan hat, Grundschüler.
nun habe ich bitte eine weitere Frage. Wieso übernimmt die Variable DC1 nicht den f-Wert (44.900015)? danke
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Gast
#6017040
MaWin schrieb: > What schrieb: >> union >> { >> float f; >> uint8_t b[4]; >> } b4_f; > > Du hast einen Typ definiert, keine Variable angelegt. Du bist nicht allein, hier stehen viele mit den einfachsten C-Konstrukten auf Kriegsfuß.
das heißt ich kann diesen typ f nicht an die Funktion übermitteln oder wie ?
Gast
#6017067
lass mal das:
1 | |
2 | |
weg und schreib bei den Funktionen ein float vor den Funktionsparameter. Also so:
1 | |
Und dann geh mal mit dem Debugger Schritt für Schritt durch.
Gast
#6017069
Also so:
1 | |
Beitrag #6017077 wurde von einem Moderator gelöscht.
Jups schrieb: > void park_sensor1(float DC1){ danke dir
Mark S. schrieb: > Jups schrieb: >> void park_sensor1(float DC1){ > > danke dir Also war es am Anfang nicht so, wie du in dem gelöschten Beitrag schriebst. Auch wenn es jetzt funktioniert ist es falsch (Schrott), da du zuviel globale Variablen hast. C ist eine Ziemlich einfache Sprache, das macht sie zwar nicht einfach in der Benutzung, aber du hast schon bei den aller einfachsten Dinge Probleme. Mit Versuch und Irrtum kommst du da nicht wreit.
Dirk B. schrieb: > Mit Versuch und Irrtum kommst du da nicht wreit. sondern ?
Mark S. schrieb: > Dirk B. schrieb: >> Mit Versuch und Irrtum kommst du da nicht wreit. > > sondern ? Mit einem gescheiten Buch. C lässt sehr viel Müll zu. Auch aus historischen Gründen. Der Compiler erkennt das auch, gibt aber „nur“ Warnungen aus. Aber auch nur, wenn man sie aktiviert.
Gast
#6017369
Bei jeder C-Frage wird dem Fragesteller nahegelegt ein C-Buch zu lesen. Bei keiner PHP-Frage wird dem Fragesteller nahegelegt ein PHP-Buch zu lesen. Bei keiner Löt-Frage wird dem Fragesteller nahegelegt ein Löt-Buch zu lesen. Bei keiner Java-Frage wird dem Fragesteller nahegelegt ein Java-Buch zu lesen. Bei keiner Mikrocontroller-Frage wird dem Fragesteller nahegelegt ein Mikrocontroller-Buch zu lesen. Bei keiner PWM-Frage wird dem Fragesteller nahegelegt ein PWM-Buch zu lesen. Bei keiner Arduino-Frage wird dem Fragesteller nahegelegt ein Arduino-Buch zu lesen. ...
Das mag am Alter von C (und dem der der Programmierer) liegen. Zudem gibt es wohl keine guten Online-Tutorials für C.
Gast
#6017598
Moinsens ;-)) Dirk B. schrieb: > C lässt sehr viel Müll zu. Auch aus historischen Gründen. > Der Compiler erkennt das auch, gibt aber „nur“ Warnungen aus. Aber auch > nur, wenn man sie aktiviert. ja irgendwie Witzig und zur Bestätigung schaut mal dort ----> http://pofahl.de/cwahrheit.htm <---- Bis dahin und einen schönen Abend :-))
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.





