NEWS
Probleme mit Atof und Strings
-
Hey Leute, vl hat jemand hier eine Idee, habe Probleme mit meinem LoraBoard von Heltec imArdunio SDK .
Ich schicke einen String wie "valueWaMa=614,1060.13,243.83#3.889#"
und teile diesen. die nummer in den ## möchte ich als zu double wandeln.void empfang(){ (....) memcpy(rxpacket, payload, size ); rxpacket[size]='\0'; char* eventData = strtok(rxpacket, "#"); char* packets = strtok(NULL, "#"); double valP = atof(packets); Serial.printf("p %s\r\n",packets); (...) }
bringt mir die ausgabe "p 3.889"
Serial.printf("p %f\r\n",valP);
stoppt das Programm.
Ich sehe das problem nicht, da atoi funktioniert.
Kann hier einer helfen? -
- wie stoppt das Programm ?
- Gibt es Meldungen ?
- Wenn ja, welche ?
- was passiert wenn du die Zeile
char* packets = strtok(NULL, "#");
umstellst in
char* packets = strtok(eventData, "#");
A.
-
@asgothian
die Ausführung der funktion Empfang wird nicht weiter ausgeführt, traces vor atof werden noch ausgeführt, danach kommt nichts mehr.
nach weiterem tests, traces aus dem hauptprogramm kommen.
wenn ich die variable packets global definiere und die atof funktion im hauptprogram ausführe, läuft es wie gewünscht.
Jetzt bin ich maximal verwirrt.in eventData ist der string ja schon getrennt, daher würde eine Umstellung nichts bringen.
In der Variable packets steht schon der richtige Inhalt drin, das zeigt ja die ursprüngliche Ausgabe vonSerial.printf("p %s\r\n",packets);
nur wenn ich diese zeile nach
Serial.printf("p %f\r\n",valP);
ändere, gehts in die Hose.
-
@mystisch sagte in Probleme mit Atof und Strings:
Serial.printf("p %f\r\n",valP);
Wie sieht's denn aus, wenn Du einmal das
Serial.printf("p %s\r\n",valP);
ausführst und einmal das
Serial.printf("p %f\r\n",'3.889');
Also zuerst prüfen, ob in valP auch das erwartete Ergebnis steht und dann testen, ob er den string auch korrekt konvertiert.
Hast Du vielleicht ein Problem mit dem Format (Ländereinstellungen)?Serial.printf("p %f\r\n",'3,889');
-
@codierknecht
wie geschrieben, die packets global definiert, in der Empfangen funktion den String geteilt und atof im hauptprogram konvertieren lassen, kam wie gewünscht der korrekte Double Wert bei raus.
In der Funktion klappts nicht.Ja ich hatte auch versucht, die variable valP in der Funktion Empfangen als String anzuzeigen, kam nichts vernünftiges dabei raus. Ausgabe "UU" gefolgt von wechselnden Zeichen, als würde Atof nicht den richtigen Speicherbereich auslesen.
Das fixe vorgeben einer Zahl im printf wurde ebenfalls korrekt angezeigt.