【发布时间】:2018-01-17 22:00:17
【问题描述】:
我有一个控制计时器的 Arduino。定时器的设置存储在字节数组中。我需要将数组转换为字符串以在外部 Redis 服务器上设置字符串。
因此,我需要将许多不同长度的字节数组转换为字符串,以作为参数传递给期望char[] 的函数。我需要用逗号分隔值并以 '\0' 结尾。
byte timer[4] {1,5,23,120};
byte timer2[6] {0,0,0,0,0,0}
我已经成功地使用sprintf() 为每个数组手动完成,就像这样
char buf[30];
for (int i=0;i<5;i++){ buf[i] = (int) timer[i]; }
sprintf(buf, "%d,%d,%d,%d,%d",timer[0],timer[1],timer[2],timer[3],timer[4]);
这给了我一个输出字符串buf: 1,5,23,120
但我必须在sprintf() 中使用固定数量的“占位符”。
我想提出一个函数,我可以将数组的名称传递给它(例如timer[]),它会构建一个字符串,可能使用“可变长度”的for循环(取决于特定的到“处理”的数组)和许多strcat() 函数。我尝试了几种方法来做到这一点,但它们对编译器和我都没有意义!
我应该往哪个方向寻找?
【问题讨论】:
-
timer[4]超出范围。 -
sprintf 返回字符数。您可以相应地将指针移动到 buf 并执行下一个值,依此类推。只要确保缓冲区足够大。并在第二个等之前手动添加逗号
-
arduino 语言是 C++
-
问题被标记为
c++,但代码(和答案)都在c中。c++的解决方案是使用std::ostringstream来格式化循环中的字节。