Go Down

Topic: String zu Int (Read 1 time) previous topic - next topic

Magicrookie

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
Code: [Select]

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

Joghurt


Magicrookie

Code: [Select]

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*)'

Joghurt

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

Magicrookie

Nicht unbedingt.
Vorrausgehend siehts so aus.

Code: [Select]

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.

Joghurt

Probier da mal atoi(var); ;)

MaFu

Aber füll das Array so:
Code: [Select]
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  ]:D
_______
Manfred

mkl0815

Ein einfaches
Code: [Select]
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.

Joghurt


C Strings beginnen mit dem Nullten Element


Ups, übersehen... :D

voithian

#9
Mar 06, 2012, 02:54 pm Last Edit: Mar 06, 2012, 03:14 pm by voithian Reason: 1
Hallo,
ich kann's im Augenblick nicht ausprobieren, aber vielleicht geht es so:

Code: [Select]

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

Magicrookie

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 :)

Go Up