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!!!

Exibições: 25798

Responder esta

Respostas a este tópico

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

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

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço