atoi CHAR BUFFER

Bonjour à tous,

Je ne comprends pas pour quoi la variable minutCp2 ne retient que le premier caractère (disons 34) envoyée dans le buffer.

        char atoiBuff2[3];
.......


String minutSubstr2 = aNewLine.substring(15, 17);
minutSubstr2.toCharArray(atoiBuff2, 2);
int minutCp2 = atoi(atoiBuff2);
Serial.println("minutSubstr2 " + minutSubstr2);
Serial.println("minutCp2 " + (String)minutCp2);
Serial.println("minutCp2 " + (String)(minutCp2 / 2));

printf("\n_%d-dayCnt-%d minutCp1-%d-minutCp2-%d-\n", __LINE__, dayCnt, minutCp1, minutCp2);

[ / code]
[code]

-aNewLine->¬
  2020 - 01 - 30  11:34:47 : 71 %  Soil Moisture  Temperature: 19.80 °C  Humidity: 36.00 %   Heat index: 18.78 °C   Dew 4.32 %

  minutSubstr2 34
  minutCp2 3
  minutCp2 1

  _539 - dayCnt - 0 minutCp1 - 32 - minutCp2 - 3 -
  [ / code]

  JPDaviau

Sans le contenu de atoiBuff2, difficile à dire :confused:

-aNewLine->¬
2020 - 01 - 30 11:34:47 : 71 % Soil Moisture Temperature: 19.80 °C Humidity: 36.00 % Heat index: 18.78 °C Dew 4.32 %

String minutSubstr2 = aNewLine.substring(15, 17);

ne retient que le premier caractère de (disons 34)

Je quote :o)

Aucune description de matériel, un bout de code incomplet ...
C'est peu :confused:
Je vais t'en donner autant que toi : https://forum.arduino.cc/index.php?topic=546956.0

On a assez d’info je pense...

Le buffer fait 3 de long, pas 2... ne pas oublier le ‘\0’ qui compte

Buffer[3] 3,4, '\0'

hbachetti:
Aucune description de matériel, un bout de code incomplet …
C’est peu :confused:
Je vais t’en donner autant que toi : https://forum.arduino.cc/index.php?topic=546956.0

Calmons-nous.

La carte n’a pas d’importance, c’est un problème de programmation.

Tu crois vraiment que je dois poster un code de 644 lignes?

Si tu compiles avec les headers, ça fonctionnera … ou pas.

#include <stdlib.h> /* atoi /
#include <stdio.h> /
printf, fgets */

printf("\n_%d-minutCp1-%d-minutCp2-%d-\n", LINE, minutCp1, minutCp2);

La carte n’a pas d’importance, c’est un problème de programmation.

La carte a son importance, car si tu utilisais la classe String avec un ATMEGA328, je ne perdrais pas mon temps à chercher et je répondrais :
Laisse tomber String et utilise des C strings.

D’autre part dans la String aNewLine, substring(15, 17) ne correspond pas à 34.
La portion de code ne correspond donc pas à ce qui est affiché … :confused:

Mais comme je vois que tu utilises un ESP (printf ne marche pas avec les plateformes ATMEGA328 :smiling_imp: ) :
J-M-L t’a donné la solution en #4.

Sinon, comme apparemment tu utilises String de manière incomplète, vois ceci : toint()

Je ne vois pas l’intérêt de passer par un C string. Autant utiliser uniquement les méthodes de String.

  Serial.print("encore mieux : "); Serial.println(aNewLine.substring(15, 17).toInt());

Jean24816:
Buffer[3] 3,4, '\0'

C’est ce que je dis le buffer a 3 caractères de longs, pas 2..minutSubstr2.toCharArray(atoiBuff2, 2); // 3 pas 2..

Sinon d’accord avec hbachetti, de manière générale il vaut mieux éviter la classe String quand on peut et si vous l’utilisez alors faites Le jusqu’au bout

Et évitez les snippets (Snippets R Us!)

Merci beaucoup.