Pages: [1]   Go Down
Author Topic: Syntax & Programs › convertire una Stringa in Int  (Read 759 times)
0 Members and 1 Guest are viewing this topic.
Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: October 25, 2011, 03:36:44 pm by pablos71 » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
char * thisChar = D3.toCharArray() ;

e tutto dovrebbe funzionare senza problemi.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry








Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

colpa mia, funziona così:

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grandioso smiley

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
Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3245
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok con 3 cifre ottengo le prime 2, va bene così aggiungo una cifra alla stringa del post smiley
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
« Last Edit: October 25, 2011, 03:31:20 pm by pablos71 » Logged

no comment

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10447
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

guarda, basta cambiare

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

in

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: