découper un string

Salut !

Je reçois un string "1515.1212"
Je voudrais pourvoir en faire 2 entier 1515 et 1212 pour m'en servir séparément.

Des idées ou solutions (avec explication de préférence) ?
Merci a vous !

c'est dans une cString ou une String ?

Je connais pas le cString.
Je l'ai définit en "String" donc je pense que c'est un simple.

neoh35:
Je connais pas le cString.
Je l'ai définit en "String" donc je pense que c'est un simple.

OK on n'aime pas trop les Strings mais bon :slight_smile:

pour le premier chiffre il suffit de demander à la classe String de lire un entier avec toInt(), il va s'arrêter au point.
Pour le second, il faut d'abord trouver le point (indexOf()) et demander à la classe String de lire un entier à partir du caractère suivant (extraire la sous chaine)

une cString c'est un tableau de char qui se termine par un caractère nul.

Quitte à dépenser bêtement de la mémoire avec la classe String, faites un sscanf() sur la c_str() associée à votre String..

void setup() {
  Serial.begin(115200);
  String message = "1515.1212";
  int a, b;
  if (sscanf(message.c_str(), "%d.%d", &a, &b) == 2) { // si on a bien trouvé deux entiers
    Serial.print(F("a vaut ")); Serial.println(a);
    Serial.print(F("b vaut ")); Serial.println(b);
  } else { // sinon erreur de format
    Serial.println(F("Erreur message"));
  }
}

void loop() {}

Je sais que les strings ont beaucoup de défauts mais j'avais pas trop le choix.

Merci beaucoup pour votre réponse !

neoh35:
Je sais que les strings ont beaucoup de défauts mais j'avais pas trop le choix.

:grin: ??? :astonished:
C'est la plus mauvaise excuse que j'ai entendue...

j'ai modifié un peu le code ci dessus au fait pour rajouter un test qui vérifie que sscanf() a lu deux entiers.

Attention un entier sur un petit arduino ça va de -32768 à 32767. si vous avez d'autres types de nombre, faudra prévoir de passer sur un long et changer le format "%d" dans sscanf(). Je vous laisse trouver la doc sur l'écriture du format