Syntax & Programs › convertire una Stringa in Int

Salve a tutti

Sarebbe bello se il forum avesse varie sezioni, tra le quali anche un po' domande software.

Ho una variabile compilata da un POST del client che è esattamente un numero in formato stringa, questo numero che arriva corrisponde a un digital output
Avrei bisogno di ricavare l'intero da questa stringa per metterlo nel digitalWrite.
Ho visto un po' di esempi su vari forum ma non funzionano, come posso fare diversamente?
Grazie

così funziona

#include <String.h> // anche se apparentemente non serve

char * thisChar = "46";
int a = atoi(thisChar);

digitalWrite(a, 1);


così non va quando lo metto in un altra variabile

#include <String.h> // anche se apparentemente non serve

String D3 = "46";

char * thisChar = D3;
int a = atoi(thisChar);
digitalWrite(a, 1);

error: cannot convert 'String' to 'char*' in initialization

ciao

nel primo caso stai usando un array di char, che atoi "digerisce" senza problemi.

Nel secondo caso stai cercando di dare ad atoi un oggetto String, e non sa che farsene (infatti l'errore dice: impossibile convertire String in char* (char * vuol dire array di char) )
In oltre l'errore è nella riga
char * thisChar = D3;
ovvero dove tenti di puntare un OGGETTO String con un puntatore a char (i puntatori possono essere gestiti come array)
modifica così:

char * thisChar = D3.toCharArray() ;

e tutto dovrebbe funzionare senza problemi.

grazie per la risposta, ........... non va neanche così, ho provato di tutto

string.c_str()
http://www.cplusplus.com/reference/string/string/c_str/

atoi
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

boost::lexical_cast works pretty well. #include <boost/lexical_cast.hpp>

librerie caricate
#include <String.h>
#include <Iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstring.h>

ho sempre un errore o di char, o di conversione, o di inizializzazione ecc

nella tua correzione ho provato così:

String D3 = "46";

char * thisChar = D3.toCharArray() ;
int a = atoi(thisChar);

con questo errore:

error: no matching function for call to 'String::toCharArray()'
C:\Programmi\arduino-0022\hardware\arduino\cores\arduino/WString.h:80: note: candidates are: void String::toCharArray(char*, unsigned int)

vedendo su toCharArray() - Arduino Reference
string.toCharArray(buf, len)

Parameters

string: a variable of type String
buf: the buffer to copy the characters into (char [])
len: the size of the buffer (unsigned int)

mettendo i parametri

String D3 = "46";
char * thisChar = D3.toCharArray(2,2) ;
int a = atoi(thisChar);

errore:
sketch_oct25a:109: error: invalid conversion from 'int' to 'char*'
sketch_oct25a:109: error: initializing argument 1 of 'void String::toCharArray(char*, unsigned int)'
sketch_oct25a:109: error: void value not ignored as it ought to be

ciao =(

colpa mia, funziona così:

String D3 = "46";

char thisChar[D3.length()];
D3.toCharArray(thisChar, D3.length()) ;
int a = atoi(thisChar);

Grandioso :slight_smile:

funzia .... anche se mi restituisce solo 4
in teoria ottengo D3[0] dovrei avere anche D3[1]
come ottengo tutto il contenuto numerico? scusa tanto, ero abituato al vecchio parseInt(string), in c/c++ mi trovo un po' in crisi su particolari trattamenti delle variabili

Grazie ancora

Ciao

D3 NON è un array ma un oggetto, che al suo interno possiede anche un array... ma va bè.

in teoria dovrebbe restituirti anche il 3 senza modifiche, mi sembra molto strano questo comportamento.. prova con un numero a 3 cifre a vedere cosa succede

ok con 3 cifre ottengo le prime 2, va bene così aggiungo una cifra alla stringa del post :slight_smile:
in teoria io inviavo
D046 per indicare che è una digital port 46 da commutare a 0
D146 per indicare che è una digital port 46 da commutare a 1

Perfetto ciaoo

guarda, basta cambiare

char thisChar[D3.length()];
  D3.toCharArray(thisChar, D3.length());

in

char thisChar[D3.length()+1];
  D3.toCharArray(thisChar, D3.length()+1);