Char配列を返す関数があり、それを文字列に変換して、より適切に処理できるようにします(他の保存データと比較してください)。私はこれを動作させるためにこのシンプルを使用していますが、何らかの理由で動作しません(bufferPos
は配列の長さ、buffer
は配列、item
は空の文字列):
for(int k=0; k<bufferPos; k++){
item += buffer[k];
}
buffer
には正しい値があり、bufferPos
にもありますが、たとえば544900010837154に変換しようとすると、54しか保持されません。Serial.printsを次のように追加すると:
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
私は何が欠けていますか?それはそのような単純なタスクのように感じ、私は解決策を見ることができません...
文字配列をヌルで終端する場合、文字配列を文字列に割り当てることができます。
char[] chArray = "some characters";
String str(chArray);
あなたのループコードに関しては、それは正しく見えますが、同じ問題が発生するかどうかを確認するためにコントローラーを試します。
https://www.arduino.cc/en/Reference/StringConstructor にアクセスして、問題を簡単に解決してください。
これは私のために働いた:
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年後、私は同じ問題に遭遇しました。これが私の解決策です。誰でも気軽にカットアンドペーストできます。最もシンプルなものは、一晩中私たちを維持します! ATMega、および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
}
そして、我々は得る:
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
これが誰かを助けることを願っています!
一時文字列オブジェクトを作成してから、既存のアイテム文字列に追加してみてください。このようなもの。
for(int k=0; k<bufferPos; k++){
item += String(buffer[k]);
}