J'ai une fonction qui retourne un tableau de caractères et je veux que cela soit transformé en une chaîne afin que je puisse mieux le traiter (comparer à d'autres données stockées). J'utilise ce simple car cela devrait fonctionner, mais pas pour une raison quelconque (bufferPos
est la longueur du tableau, buffer
est le tableau et item
est une chaîne vide):
for(int k=0; k<bufferPos; k++){
item += buffer[k];
}
La buffer
a les bonnes valeurs, de même que bufferPos
, mais lorsque j'essaie de convertir, par exemple 544900010837154, il n'en contient que 54. Si j'ajoute Serial.prints au for comme ceci:
for(int k=0; k<bufferPos; k++){
Serial.print(buffer[k]);
Serial.print("\t");
Serial.println(item);
item += buffer[k];
}
la sortie est la suivante:
5
4 5
4 54
9 54
0 54
0 54
0 54
1 54
0 54
8 54
3 54
7 54
1 54
Qu'est-ce que je rate? C'est une tâche si simple et je ne vois pas la solution ...
Si le tableau de caractères est terminé à zéro, vous pouvez l'affecter à la chaîne:
char[] chArray = "some characters";
String str(chArray);
En ce qui concerne votre code de boucle, cela a l'air correct, mais je vais essayer sur mon contrôleur pour voir si j'obtiens le même problème.
Trois ans plus tard, j'ai rencontré le même problème. Voici ma solution, tout le monde se sent libre de couper-n-coller. Les choses les plus simples nous empêchent de dormir toute la nuit! Fonctionnant sur ATMega et Adafruit Feather M0:
void setup() {
// turn on Serial so we can see...
Serial.begin(9600);
// the culprit:
uint8_t my_str[6]; // an array big enough for a 5 character string
// give it something so we can see what it's doing
my_str[0] = 'H';
my_str[1] = 'e';
my_str[2] = 'l';
my_str[3] = 'l';
my_str[4] = 'o';
my_str[5] = 0; // be sure to set the null terminator!!!
// can we see it?
Serial.println((char*)my_str);
// can we do logical operations with it as-is?
Serial.println((char*)my_str == 'Hello');
// okay, it can't; wrong data type (and no terminator!), so let's do this:
String str((char*)my_str);
// can we see it now?
Serial.println(str);
// make comparisons
Serial.println(str == 'Hello');
// one more time just because
Serial.println(str == "Hello");
// one last thing...!
Serial.println(sizeof(str));
}
void loop() {
// nothing
}
Et nous obtenons:
Hello // as expected
0 // no surprise; wrong data type and no terminator in comparison value
Hello // also, as expected
1 // YAY!
1 // YAY!
6 // as expected
J'espère que cela aide quelqu'un!
Visitez https://www.arduino.cc/en/Reference/StringConstructor pour résoudre le problème facilement.
Cela a fonctionné pour moi:
char yyy[6];
String xxx;
yyy[0]='h';
yyy[1]='e';
yyy[2]='l';
yyy[3]='l';
yyy[4]='o';
yyy[5]='\0';
xxx=String(yyy);
Peut-être devriez-vous essayer de créer un objet de chaîne temporaire puis d’ajouter à la chaîne d’élément existante .
for(int k=0; k<bufferPos; k++){
item += String(buffer[k]);
}