Boa tarde, desenvolvedores!
Estou programando no arduino aqui, e agarrei num problema.
Tenho uma variável String e preciso pegar uma substring dela e jogar pra uma variável Int.
O erro que mais retorna é o "cannot convert 'String' to 'int' in assignment".
Alguém saberia como fazer?
Abraços!!!
Tags:
Cara,
Tenta usar a função atoi()
Veja esse exemplo que fiz agora:
char SuaString[3] = "";
int Numero = 0;
void setup(){
Serial.begin(9600);
Serial.println("Digite um valor com 3 digitos.");
}
void loop(){
//Recebe uma string de 3 caracteres pela serial
if (Serial.available() > 0) {
for (int i=0;i<3;i++){
//Armazena na string (array de char)
SuaString[i] = Serial.read();
delay(10);
}
//Imprime a string digitada pelo usuario
Serial.print("String digitada: ");
Serial.println(SuaString);
//Converte a string em inteiro
Numero = atoi(SuaString);
//Imprime o valor inteiro pela serial
Serial.print(Numero);
//Uma operacao matematica qualquer
Serial.print(" com mais 2 = ");
Serial.println(Numero + 2);
}
}
Espero que isso ajude.
Abraço!!
atoi();
Bom!
Mas o problema é que a variável ta declarada com a classe String.
String MinhaString = "123";
int Numero = MinhaString;
Dessa forma, não consigo setar minha variável int de jeito nenhum.
Será que alguém tem alguma ideia?!
Já agradeço!
Valeu!
Abraços!!!!
faz uma função para fazer essa conversão, como se fosse uma conversão de bases
ex:
String minhaString = "123";
int meuNumero = 1*10^2 + 2*10^1 + 3*10^0;
int stringToInt(String minhaString) {
int i, x;
int tam minhaString.length() - 1;
int numero = 0;
for(i = tam; i >= 0; i--) {
x = minhaString.charAt(i);
numero += (int) pow(x, tam - i);
}
return numero;
}
Não testei, mas acho que está certo.
Boa sorte!
Já tentou usar a função atoi do C?
int valorInteiro = atoi( valorString.c_str() );
c_str vai retornar a versão C da string para o uso na função atoi. Aí sim você pode fazer a conversão
http://www.cplusplus.com/reference/string/string/c_str/
e
Gabriel, sua solução atendeu perfeitamente à minha necessidade.
Os caras tentando construir canhão pra matar mosquito e sua solução aqui, no começo da discussão, esquecida....
Valeu, mesmo!
Perfeito, Gabriel ! Me ajudou muito !
Obrigado.
A função atoi tbm não quer funcionar. Retorna mesmo erro. Ela funciona quando ta declarado como char.
Fernando, acredito que sua função funcione mesmo, vou testar assim que chegar em casa.
Obrigado pessoal!
Após testar, posto aqui.
Abraços!!!!
Revendo a função que eu fiz vi um erro grave, segue a correção.
- Os numeros em char não tem a mesma representação em decimal, segundo a tabela ascii '0' = 48, '1' = 49, ... então é só subtrair 48 do char que temos o decimal;
x = (int) minhaString.charAt(i) - 48;
Fica assim o código:
int stringToInt(String minhaString) {
int i, x;
int tam minhaString.length() - 1;
int numero = 0;
for(i = tam; i >= 0; i--) {
x = (int) minhaString.charAt(i) - 48;
numero += (int) pow(x, tam - i);
}
return numero;
}
Abraço
Noite!
Fernando, é isso mesmo. Só precisei fazer uma modificação:
int stringToInt(String minhaString) {
int i, x;
int tam = minhaString.length() - 1;
int numero = 0;
for(i = tam; i >= 0; i--) {
x = minhaString.charAt(i) - 48;
numero += x * pow(10, tam - i);
}
return numero;
}
Funcionou certinho! Porém, quando o número é 100 ele retorna 99. Quando é 101, retorna 100,... e por ai vai.
Não entendi isso...
Valeu!!
Obrigado!!!!
Abraços!!!!
Olá.
O problema está na precisão do pow (que retorna um float, não um int)
ele está considerando o 10^2 como 99
a solução é uma função "mais precisa", como esta:
int potencia(int base, int expoente)
{
if(expoente == 0)
return 1;
else
return base * potencia(base, expoente - 1);
}
ou seja, a linha
numero += x * pow(10, tam - i);
fica:
numero += x * potencia(10, tam - i);
creio que isso resolva o problema
Show! Resolvido!
Obrigado, Alexandre!
Abraços!!!
Opa, bom saber que funcionou.
ps: sem querer ser chato, mas já sendo, é AlexandER ;P
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por