Go Down

Topic: Syntax & Programs › convertire una Stringa in Int (Read 903 times) previous topic - next topic

pablos

Oct 25, 2011, 03:12 pm Last Edit: Oct 25, 2011, 10:36 pm by pablos71 Reason: 1
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
no comment

lesto

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

char * thisChar = D3.toCharArray() ;


e tutto dovrebbe funzionare senza problemi.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

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>
http://stackoverflow.com/questions/228005/alternative-to-itoa-for-converting-integer-to-string-c


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 http://arduino.cc/en/Reference/StringToCharArray
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  =(








no comment

lesto

colpa mia, funziona così:

String D3 = "46";

char thisChar[D3.length()];
D3.toCharArray(thisChar, D3.length()) ;
int a = atoi(thisChar);
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

Grandioso :)

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
no comment

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

#6
Oct 25, 2011, 10:25 pm Last Edit: Oct 25, 2011, 10:31 pm by pablos71 Reason: 1
ok con 3 cifre ottengo le prime 2, va bene così aggiungo una cifra alla stringa del post :)
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
no comment

lesto

guarda, basta cambiare

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


in

Code: [Select]
char thisChar[D3.length()+1];
  D3.toCharArray(thisChar, D3.length()+1);
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up