将char数组转换为String

时间:2013-06-18 00:26:57

标签: string arduino arrays

我有一个返回char数组的函数,我希望它变成一个String,这样我就可以更好地处理它(与其他存储数据相比)。我使用这个简单的应该可以工作,但它不是出于某种原因(bufferPos是数组的长度,buffer是数组,item是一个空字符串) :

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

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

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

我错过了什么?感觉就像这么简单的任务,我没有看到解决方案......

5 个答案:

答案 0 :(得分:25)

如果char数组以null结尾,则可以将char数组分配给字符串:

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

至于你的循环代码,它看起来是正确的,但我会尝试我的控制器,看看我是否遇到同样的问题。

答案 1 :(得分:5)

三年后,我遇到了同样的问题。这是我的解决方案,每个人都可以随意切割粘贴。最简单的事情让我们彻夜难眠!在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

希望这有助于某人!

答案 2 :(得分:5)

访问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 :(得分:0)

您是否应该尝试创建临时字符串对象,然后添加到现有项目字符串。 这样的事情。

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

答案 4 :(得分:-1)

我再次搜索并在百度搜索此问题。 然后我找到两种方式:

1,

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

请注意&#39; \ 0&#39; char数组ch是必需的。

2,

&#13;
&#13;
#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;
}
&#13;
&#13;
&#13;

通过这种方式,您还需要添加&#39; \ 0&#39;在char数组的末尾。

此外,stirstream.h文件将被放弃并被stringstream

替换