web-dev-qa-db-ja.com

文字配列を文字列に変換します

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

私は何が欠けていますか?それはそのような単純なタスクのように感じ、私は解決策を見ることができません...

17
FloIancu

文字配列をヌルで終端する場合、文字配列を文字列に割り当てることができます。

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

あなたのループコードに関しては、それは正しく見えますが、同じ問題が発生するかどうかを確認するためにコントローラーを試します。

26
user2019047

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

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

これが誰かを助けることを願っています!

5
Rich Martin

一時文字列オブジェクトを作成してから、既存のアイテム文字列に追加してみてください。このようなもの。

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