我有一个返回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
我错过了什么?感觉就像这么简单的任务,我没有看到解决方案......
答案 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,
char ch[]={'a','b','c','d','e','f','g','\0'};
string s=ch;
cout<<s;
&#13;
请注意&#39; \ 0&#39; char数组ch是必需的。
2,
#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;
通过这种方式,您还需要添加&#39; \ 0&#39;在char数组的末尾。
此外,stirstream.h文件将被放弃并被stringstream
替换