2013-06-18 19 views
12

Ich habe eine Funktion, die ein Char-Array zurückgibt und ich möchte das in einen String verwandelt, damit ich es besser verarbeiten kann (im Vergleich zu anderen gespeicherten Daten). Ich bin mit diesem einfach für das sollte funktionieren, aber es funktioniert nicht aus irgendeinem Grunde (bufferPos die Länge des Arrays ist, buffer das Array und item ist ein leerer String):Char-Array in String transformieren

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

Die buffer hat die richtigen Werte und tut so bufferPos, aber wenn ich versuche, zum Beispiel zu konvertieren 544900010837154, es hält nur 54. Wenn ich Serial.prints auf die für wie folgt hinzu:

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

der Ausgang ist dies:

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 fehlt mir? Es fühlt sich an wie eine so einfache Aufgabe, und ich nicht die Lösung sehen ...

Antwort

21

Wenn Sie die char-Array null beendet haben, können Sie den char-Array zu dem String zuweisen:

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

Was Ihre Loop-Code, es sieht richtig aus, aber ich werde an meinem Controller versuchen, um zu sehen, ob ich das gleiche Problem bekomme.

+8

Vielen Dank! Aus irgendeinem Grund wollte str() nicht kompilieren, aber String() tat und es funktioniert wie beabsichtigt. – FloIancu

+0

'str' wurde in diesem Bereich nicht deklariert (Compiler 1.8.3) –

+0

Downvoting, da str() keine Arduino-Funktion ist. Allerdings funktioniert String() tatsächlich so sehr nach Flolancu. –

0

Möglicherweise sollten Sie versuchen, ein temporäres String-Objekt zu erstellen und dann zur vorhandenen Elementzeichenfolge hinzuzufügen. So etwas wie das.

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

Dies zeigt immernoch nur die ersten zwei Zahlen. – FloIancu

-1

Ich habe es wieder suchen und diese Frage in Baidu suchen. Dann finde ich 2 Möglichkeiten:

1,

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

zu beachten, dass '\ 0' ist für char-Array ch notwendig.

2,

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

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

Auf diese Weise müssen Sie auch die '\ 0' am Ende des char-Array hinzuzufügen.

Außerdem wird strstream.h Datei aufgegeben werden und durch string

2

Drei Jahre später ersetzt werden, lief ich in das gleiche Problem. Hier ist meine Lösung, jeder hat die Freiheit, cut-n-paste zu verwenden. Die einfachsten Dinge halten uns die ganze Nacht wach! Laufen auf einem ATMega und Adafruit Feder 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 jemand!

Verwandte Themen