关于arduino:将char数组转换为String

Transform char array into String

我有一个返回char数组的函数,我希望将其转换为String,以便更好地处理它(与其他存储的数据进行比较)。 我使用这个简单的方法应该可以工作,但是由于某些原因(bufferPos是数组的长度,buffer是数组,item是一个空字符串),它不起作用:

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

buffer具有正确的值,bufferPos也具有正确的值,但是当我尝试进行转换(例如544900010837154)时,它仅保留54。如果我将Serial.prints添加到for中,如下所示:

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

输出是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
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数组为null终止,则可以将char数组分配给字符串:

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

至于您的循环代码,看起来不错,但是我将尝试在控制器上查看是否遇到相同的问题。


访问https://www.arduino.cc/en/Reference/StringConstructor轻松解决问题。

这对我有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);


三年后,我遇到了同样的问题。这是我的解决方案,每个人都可以随意粘贴。最简单的事情使我们整夜不眠!在ATMega和Adafruit Feather M0上运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
}

我们得到:

1
2
3
4
5
6
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

希望这对某人有帮助!


可能您应该尝试创建一个临时字符串对象,然后将其添加到现有项目字符串中。
这样的事情。

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


我已再次搜索它并在百度中搜索此问题。
然后我发现2种方法:

1,

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

请注意,对于字符数组ch,必须使用' 0'。

2,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<string>
#include<strstream>
using namespace std;

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

这样,您还需要在char数组的末尾添加' 0'。

另外,strstream.h文件将被放弃,并由stringstream替换