24 votes

Transformer un tableau de chars en String

J'ai une fonction qui renvoie un tableau de caractères et je veux qu'il soit transformé en String pour pouvoir mieux le traiter (le comparer à d'autres données stockées). J'utilise cette fonction simple qui devrait fonctionner, mais qui ne fonctionne 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];
      }

En buffer a les bonnes valeurs et il en va de même pour bufferPos mais lorsque j'essaie de convertir, par exemple, 544900010837154, il ne retient 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];
                }

le résultat est le suivant :

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 ? Cela semble être une tâche si simple et je ne vois pas la solution...

34voto

user2019047 Points 739

Si le tableau de caractères est à terminaison nulle, vous pouvez affecter le tableau de caractères à la chaîne :

char[] chArray = "some characters";
String String(chArray);

Quant à votre code de boucle, il semble correct, mais je vais essayer sur mon contrôleur pour voir si j'obtiens le même problème.

7voto

Eswar Points 61

Visite https://www.arduino.cc/en/Reference/StringConstructor pour résoudre le problème facilement.

Cela a marché 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);

6voto

Rich Martin Points 61

Trois ans plus tard, j'ai rencontré le même problème. Voici ma solution, tout le monde est libre de faire des copier-coller. Les choses les plus simples nous gardent éveillés toute la nuit ! Fonctionnant sur un ATMega, et un 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 on obtient :

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 aidera quelqu'un !

0voto

praks411 Points 1942

Vous devriez peut-être essayer de créer un objet de type chaîne temporaire et l'ajouter à la chaîne de l'élément existant. Quelque chose comme ceci.

for(int k=0; k<bufferPos; k++){
      item += String(buffer[k]);
      }

-1voto

sunshinestyle Points 1

Je l'ai cherché à nouveau et j'ai cherché cette question dans baidu. J'ai alors trouvé 2 façons :

1,

char ch[]={'a','b','c','d','e','f','g','\0'};
string s=ch;
cout<<s;

Sachez que ' \0 est nécessaire pour le tableau de caractères ch.

2,

#include<iostream>
#include<string>
#include<strstream>
using namespace std;

int main()
{
    char ch[]={'a','b','g','e','d','\0'};
    strstream s;
    s<<ch;
    string str1;
    s>>str1;
    cout<<str1<<endl;
    return 0;
}

De cette manière, vous devez également ajouter l'élément ' \0 à la fin du tableau de chars.

De même, le fichier strstream.h sera abandonné et remplacé par stringstream

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X