23

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

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

具有正确的bufferbufferPos,但当我尝试转换时,例如 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

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

4

5 回答 5

33

如果您有 char 数组 null 终止,您可以将 char 数组分配给字符串:

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

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

于 2013-06-18T02:28:01.290 回答
6

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

希望这对某人有帮助!

于 2016-10-28T19:03:24.917 回答
6

访问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);
于 2017-06-09T12:27:06.447 回答
0

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

for(int k=0; k<bufferPos; k++){
      item += String(buffer[k]);
      }
于 2013-06-18T11:07:22.187 回答
-1

我又搜索了一遍,在百度上搜索了这个问题。然后我找到了两种方法:

1、

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

请注意 '\0' 对于 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;
}

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

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

于 2014-12-03T07:48:45.370 回答