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 ...
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.
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!
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);
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]);
}