it-swarm.com.de

Wandle char-Array in String um

Ich habe eine Funktion, die ein Zeichenarray zurückgibt, und ich möchte, dass es in einen String umgewandelt wird, damit ich es besser verarbeiten kann (vergleiche mit anderen gespeicherten Daten). Ich verwende diese einfache Methode, damit dies funktionieren sollte, aber aus irgendeinem Grund (bufferPos ist die Länge des Arrays, buffer ist das Array und item ist ein leerer String):

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

Die Variable buffer hat die richtigen Werte und bufferPos, aber wenn ich versuche zu konvertieren, z. B. 544900010837154, gilt dies nur für 54. Wenn ich Serial.prints wie folgt hinzufüge:

for(int k=0; k<bufferPos; k++){
                  Serial.print(buffer[k]);
                  Serial.print("\t");
                  Serial.println(item);
                  item += buffer[k];
                }

die Ausgabe ist diese:

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

Was vermisse ich? Es fühlt sich wie eine einfache Aufgabe an und ich sehe die Lösung nicht ...

13
FloIancu

Wenn Sie das char-Array null beendet haben, können Sie das char-Array der Zeichenfolge zuweisen:

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

Ihr Schleifencode sieht zwar richtig aus, aber ich versuche auf meinem Controller, ob das gleiche Problem auftritt.

23
user2019047

Drei Jahre später stieß ich auf das gleiche Problem. Hier ist meine Lösung, jeder kann sich gerne einschneiden. Die einfachsten Dinge halten uns die ganze Nacht durch! Laufen auf einer ATMega und 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
}

Und wir bekommen:

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

Hoffe das hilft jemandem!

5
Rich Martin

Besuchen Sie https://www.arduino.cc/de/Reference/StringConstructor , um das Problem leicht zu lösen.

Das hat für mich funktioniert:

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);
3
Eswar

Sie sollten versuchen, ein temporäres Zeichenkettenobjekt zu erstellen und dann die vorhandene Elementzeichenfolge . Hinzuzufügen. Etwas in der Art.

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