2013-06-18 39 views
12

文字配列を返す関数があり、これをStringに変換して、他の格納されたデータと比較して処理しやすくしたいと思います。私はそれが動作するはずのために、この単純なを使用していますが、それはいくつかの理由でない(bufferPosは、配列の長さである、bufferが配列され、itemは空の文字列です):bufferがあり文字列に文字配列を変換する

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

右の値とそのbufferPosを行いますが、私は例544900010837154ため、変換しようとすると、私はこのようなためにSerial.printsを追加すると、それだけで54を保持している:

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

を出力はこれです:

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 

私は何が欠けていますか?それは、このような単純な作業のように感じていると私は解決策を参照してくださいに失敗...

答えて

21

あなたが終わるchar配列はnullを持っている場合は、文字列に文字列を割り当てることができますあなたのためのよう

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

ループコード、それは正しく見えるが、私は同じ問題を抱えているかどうかを私のコントローラで試してみるだろう。

+8

ありがとうございました!なんらかの理由でstr()はコンパイルしたくないのですが、String()は意図したとおりに動作します。 – FloIancu

+0

'str'がこのスコープで宣言されていません(コンパイラ1.8.3)。 –

+0

str()がArduino関数ではないため、ダウン投票しています。しかし、String()は実際にFlolancuにそのような名声を働かせます。 –

0

一時的な文字列オブジェクトを作成してから、既存のアイテム文字列に追加することをお勧めします。 このようなものです。

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

これには最初の2つの数字しか表示されません。 – FloIancu

-1

私は再びそれを検索し、この質問をbaiduで検索します。 は、その後、私は2つの方法を見つける:

1を、

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

がそれに注意してください '\ 0' char配列CHのために必要です。このようにして

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; 
 
}

、あなたはまた、char配列の末尾に '\ 0' を追加する必要があります。

また、strstream.hファイルが放棄され、

2

三年後にstringstreamに置き換えることが、私は同じ問題に遭遇しました。ここに私の解決策があります。誰もがカットアンドペーストすることができます。一番簡単なことは一晩中私たちを守ってくれる! ATMEGA上で実行されている、とAdafruitフェザー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 
} 

そして、我々が得る:

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 

が、これは誰かに役立ちます願っています!

関連する問題