Zahlen im CharArray in double Werte umwandeln

Hallo Forum,

ich möchte ein paar Werte aus einer Ini-Datei in Int und Double Werte umwandeln. Die Ini-Datei lese ich in ein CharArray ein. Ich lese jede Zeile bis zum Return ein und gucke dann welcher Wert hinter dem =-Zeichen steht.

 ptr = strtok(Init, "\n");
  while (ptr != NULL)
  {
    ptr = strtok(NULL, "=");
    j++;
    if (j == 6)
      IntZahl = atoi(ptr);
    if (j  == 7)
      DoubleZahl = atof(ptr);
….
}

Die Ausgabe sieht so aus:

16:25:45.102 -> IntZahl 
16:25:45.102 -> j=6= 3    
16:25:45.135 -> DoubleZahl 
16:25:45.135 -> j=7= 1,72

Aber wenn ich die Werte mir ausgeben lasse schneidet er hinten ab.

16:25:45.575 -> IntZahl = 3
16:25:45.609 -> DoubleZahl = 1.00

Kann ich atof (Ascii to float) nicht mit einer double Variablen nutzen? atod gibt es leider nicht. Danke.

float und double sind auf AVRs das Gleiche. Und atof() arbeitet genaugenommen mit double

void setup() 
{
  Serial.begin(9600);

  char str[] = "16:25:45.102";

  Serial.println(atoi(strtok(str, ":")));
  Serial.println(atoi(strtok(NULL, ":")));
  Serial.println(atof(strtok(NULL, ":")), 3);
}

void loop() 
{
}

Kann ich atof (Ascii to float) nicht mit einer double Variablen nutzen?

Doch, aber nicht mit einem Text mit ','

double test = atof("1.234"); // Beachte den Dezimalpunkt
Serial.println(test,4); // Ausgabe "1.2340"

Ahh so ja kla logisch. Danke.

Dann muss ich jetzt noch die "," durch "." ersetzten.

Ich lese die Ini-Datei ins Char ein:

  while (myFile.available())
  {
    char ltr = myFile.read();
    if (ltr == ",")
      ltr = ".";
    else
      ltr = myFile.read();

    Init [i++] = ltr;
  }

klappt aber irgendwie nicht so... aber die Funktion Init.replace(",",".") funktionierte auch nicht..

Bitte C++ Grundlagen lernen!!

"," liefert dir einen Zeiger auf eine Zeichenkette!
Das willst du aber gar nicht, denn ltr ist ein einzelnes Zeichen.
Du vergleichst Äpfel mit Birnen.
Der Vergleich wird nahezu immer fehlschlagen.
(was auch gut so ist)

Tipp:
Wenn du die ausführlichen Meldungen aktivierst, wird dir der Kompiler den Kram auch um die Ohren hauen.

lass den "else" Zweig weg...

Jaaaaa… C++ Grundlagen sind hilfreich.... Danke für den Link. :grin:

  while (myFile.available())
  {
    char ltr = myFile.read();
    if (ltr == ',')
     ltr = '.';
     
    Init [i++] = ltr;
  }

läuft