Arduino:字符串连接?
Posted
技术标签:
【中文标题】Arduino:字符串连接?【英文标题】:Arduino: String join? 【发布时间】:2011-04-25 18:16:33 【问题描述】:我正在尝试为 Arduino 编写 join
方法:
#define ARG_DELIMITER ','
String join(const String strs[], const int len)
String result = "";
for (int i = 0; i < len; i++)
result += strs[i] + ARG_DELIMITER;
Serial.println(result);
return result.substring(0, result.length() - 1);
loop()
中的调用代码:
const String args[3] = "foo", "bar", "baz";
Serial.println(SlaveTalk.join(args, 3));
这将打印以下内容:
foo
foo
foo
fo
只要程序运行,后跟空字符串。
我在这里做错了什么?
【问题讨论】:
可能更重要的是,String
类/类型是什么?
@Michael - String
类似乎已定义为 here。
从 C++ 角度接近此问题的人可能会感兴趣的另一个细节:“Arduino 语言基于 C/C++”(来自 arduino.cc/en/Reference/HomePage)。所以它类似于但不完全是 C++。
【参考方案1】:
这一行
const String args[3] = "foo", "bar", "baz";
给你字符串
"foo\0" "bar\0" "baz\0"
其中 \0 是 NULL 字符。所以当你连接时,我希望你最终得到:
"foo\0bar\0baz\0"
打印在 null 处停止,这就是您看到 foo 3 次的原因。在 return 语句中,长度为 3 "foo",减去 1 得到 "fo"
【讨论】:
我不认为这是正确的。 Arduino String 类使用strcat
表示+=
,如下所示:j.mp/dXCCrg。 strcat
覆盖第一个缓冲区的空终止符,并在末尾附加一个新的空终止符:cplusplus.com/reference/clibrary/cstring/strcat。【参考方案2】:
以下代码使用 Arduino 软件版本 0022 和带有 ATmega 328 的 Arduino Duemilanove 按预期工作:
#define ARG_DELIMITER ','
class SlaveTalkClass
public:
String join(const String strs[], const int len)
String result = "";
for (int i = 0; i < len; i++)
result += strs[i] + ARG_DELIMITER;
Serial.println(result);
return result.substring(0, result.length() - 1);
SlaveTalk;
void setup()
Serial.begin(9600);
void loop()
const String args[3] = "foo", "bar", "baz";
Serial.println(SlaveTalk.join(args, 3));
它反复向串行监视器打印以下内容:
foo,
foo,bar,
foo,bar,baz,
foo,bar,baz
【讨论】:
【参考方案3】:PString 是一个优秀的库,可以连接。它有一些简洁的功能,最重要的是,它是运行时安全的。
【讨论】:
展示你如何在实际任务中使用 PString,添加一些示例代码!以上是关于Arduino:字符串连接?的主要内容,如果未能解决你的问题,请参考以下文章
在两个 arduino 微控制器上使用 i2c 通信发送字符串