Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Probleme mit Atof und Strings

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    23
    1
    1.3k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

Probleme mit Atof und Strings

Geplant Angeheftet Gesperrt Verschoben Off Topic
5 Beiträge 3 Kommentatoren 450 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Mystisch
    schrieb am zuletzt editiert von Mystisch
    #1

    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?

    AsgothianA 1 Antwort Letzte Antwort
    0
    • M Mystisch

      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?

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      @mystisch

      • 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.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      M 1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @mystisch

        • 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.

        M Offline
        M Offline
        Mystisch
        schrieb am zuletzt editiert von
        #3

        @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 von

        Serial.printf("p %s\r\n",packets);
        

        nur wenn ich diese zeile nach

        Serial.printf("p %f\r\n",valP); 
        

        ändere, gehts in die Hose.

        CodierknechtC 1 Antwort Letzte Antwort
        0
        • M Mystisch

          @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 von

          Serial.printf("p %s\r\n",packets);
          

          nur wenn ich diese zeile nach

          Serial.printf("p %f\r\n",valP); 
          

          ändere, gehts in die Hose.

          CodierknechtC Offline
          CodierknechtC Offline
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von
          #4

          @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');
          

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          M 1 Antwort Letzte Antwort
          0
          • CodierknechtC Codierknecht

            @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');
            
            M Offline
            M Offline
            Mystisch
            schrieb am zuletzt editiert von
            #5

            @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.

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            487

            Online

            32.5k

            Benutzer

            81.7k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe