Convertir une String en entier ( int) !

Bonjour ,
Nouveau passage difficile , jai une String "2 " qui pourrait aussi etre "31 " dont je dois placer la valeur dans l’entier : int rang ;

si j’ecris :

rang=int(maString) ; // ca buggue !!!

avez vous un plan ???

Merci la comunauté !

Récurrente question. les String étant une m...e je te conseille d'apprendre à t'en passer et de maitriser les tableau de charactères.

Sinon

rang=maString.toInt();

Méthode non documentée.

Merci ,

Mais j'avais déja essaye dans ce style , car ma chaine est : char rangchaine[5]; int rang;

et j'ai essaye ton code : rang=rangchaine.toInt; et la le compilateur buggue : request for member 'toint' in 'rangchaine' , which is of non-class type 'char[5]'

Qu'en penser ...

JLUC

TOP ! j ai trouvé ! dans le forum :

rang= atoi(rangchaine);

c'est reparti ! Génial Arduino !!!

Le compilateur ne bugge pas, il t'insulte juste parce que tu lui demande n'importe quoi. XD

Blague mise à part, le C/C++ est un langage très typé. On ne peut pas faire n'importe quoi. De plus c'est une langage très bas niveau qui ne contrôle non plus pas tout ce que tu fait. Le compilateur suppose que le programmeur sait ce qu'il fait.

String maString; est un objet de type String. La classe String contient un membre toInt() (qui de manière interne fait appel à atoi() ); char maChaine[20]; est un tableau de caractères. atoi() est une fonction de la libc (bibliothèque standard du langage C) qui effectue une opération de conversion entre une chaine de caractère représenté par un tableau de caractère et un int.

String (classe C++) est un objet de plus haut niveau que char.

Mais bien que tu puisse faire du C++ sur Arduino, tu n'est pas sur un ordinateur de bureau avec mémoire virtuelle infinie etc ...

Sur un microcontroleur il faut comprendre ce qu'il se passe au bas niveau, en mémoire, pour éviter de faire n'importe quoi.

Le problème de String est que cette classe te masque tout les aspects de gestion de la mémoire associée. Or quand tu n'as que 2KB de mémoire, mieux vaut avoir une vision claire de chaque octet utilisé. Parce que quand ton programme vient a manquer de mémoire, il crashe violemment sans t'expliquer pourquoi.

Bonjour,

barbudor: les String étant une m...e je te conseille d'apprendre à t'en passer et de maitriser les tableau de charactères.

Je plussoie fortement !

barbudor: rang=maString.toInt();

Méthode non documentée.

Méthode qui en plus porte mal son nom puisqu'elle retourne un long ...

jlpic: rang= atoi(rangchaine);

c'est reparti ! Génial Arduino !!!

Question piège : comment fait tu la différence entre une erreur (en général -1) et un nombre converti avec atoi() ? Réponse : tu ne peut pas ! Et quand on ne peut pas faire la différence entre une erreur et une valeur souvent cela signifie qu'on utilise une fonction déprécié voir dangereuse ;) (ou dans le cas de atoi() ... les deux ...)

Pour convertir un char* en int la meilleur solution est d'utiliser sscanf()

int var;
char str[30] = "42";
sscanf(str, "%d", &var);

sscanf() retourne le nombre de variables quelle a pu "lire", si cette valeur est différente du nombre d'arguments c'est qu'il y a une erreur.