String zu Int

Hallo zusammen,

Ich versuche krampfhaft einen String in eine Int Variable zu verschieben. Komme dabei allerdings nicht weiter. Kann mir jemand einen Denkanstoß / Befehl geben?

Möglicher Code

String Zahl="101";
int Nummer = parseInt(Zahl);  //könnte so aussehen , funktioniert aber nicht.
Serial.println(Nummer);

atoi()

String Zahl="101";
int Nummer = atoi(Zahl);
Serial.println(Nummer);

Fehlermeldung:
Webserver_test.cpp: In function ‘void loop()’:
Webserver_test:97: error: cannot convert ‘String’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’

Hmm, ok. Muss es denn unbedingt ein String sein...?

Nicht unbedingt. Vorrausgehend siehts so aus.

char var[4];
var[1]=49;  //1
var[2]=48;  //0
var[3]=49;  //1

Habe quasi aus den 3 chars einen String gebastelt in dem guten Glauben, dass ich aus dem String leichter wieder eine vollständige Dezimal-Zahl basteln könnte.

Probier da mal atoi(var); ;)

Aber füll das Array so:

char var[4];
var[0]=49;  //1
var[1]=48;  //0
var[2]=49;  //1
var[3]=0;
int i=atoi(var);

C Strings beginnen mit dem Nullten Element und benötigen ein Nullbyte als Abschluss. Sonst kann es die niedlichsten Seiteneffekte geben ]:smiley:

Ein einfaches char *string = "101"; hilft da auch schon. Leider hat die String-Klasse keine Methode, um direkt die Adresse des internen Buffers zu bekommen. Das wäre für einige Sachen eine Erleichterung. Es würde ja ein "const char*" reichen, damit keiner von extern im Buffer rumrühert.

MaFu: C Strings beginnen mit dem Nullten Element

Ups, übersehen... :D

Hallo, ich kann's im Augenblick nicht ausprobieren, aber vielleicht geht es so:

char puffer[50];   // genügend gross
String s = "101";

// Angaben für Version 0022, Version 1.0 sieht ein wenig anders aus
// wie der Name sagt...
s.toCharArray(puffer, sizeof puffer);

int i = atoi(puffer);
Serial.println(i);

// oder mit toInt() vielleicht einfacher so...

// toInt() anwenden auf eine Instanz eines String-Objektes
long l = s.toInt();    // liefert einen long-Wert zurück (trotz des Namens!)
Serial.println(l);

Neugierige schauen in WString.h / WString.cpp nach ;)

@mkl0815: toInt() greift übrigens direkt auf den internen Puffer des Objektes zu und ruft damit lediglich atol() auf.

Wolfgang

Vielen Dank!

atoi(); lies keinen char in int ohne eine üble Fehlermeldung convertieren.

Aber toInt(); war die Lösung für all meine Probleme!

Danke nochmal :)