如何结合C ++字符串和Arduino字符串?

时间:2012-03-23 13:25:07

标签: c++ string arduino

我一直在为我的项目编写一个库(现在我正在使用Arduino)。我遇到的问题是C ++和Arduino中的string不同。

也就是说,我希望我的图书馆独立于Arduino,所以我使用#include <string>并稍后声明string s;。但是在Arduino中,字符串由Arduino定义并声明为String s2

当我将我的库包含到草图中时,我会在我尝试包含C ++字符串库(error: string: No such file or directory)的行上获得#include <string>

有没有办法让Arduino使用C ++字符串库,或者在编译时将字符串转换为Arduino字符串?

2 个答案:

答案 0 :(得分:10)

有几件事:

  1. 我不确定你做独立于Arduino的事情的理由。通常,编程微控制器不是非常可调制的并且可能与经典计算机程序非常不同。如果你真的想要独立于任何微控制器和任何平台,你仍然可以使用C风格的字符串,char *指向一组字符。
  2. 做你想做的事情并不容易。首先,您需要std::string库的源代码。执行#include <string>是不够的:您还必须为AVR平台编译字符串库。
  3. 与传统的计算机程序相比,Arduino处理C ++代码的方式存在一些“局限性”:例如,运算符newdelete未实现。此外,std::string实现可能还需要其他东西,因此要管理很多依赖项,或者Arduino的代码源大小太大。
  4. 对于像Arduino这样的AVR微控制器,有一些经典的字符串工具的实现,但它们是以程序的方式(而不是以面向对象的方式)为C风格的字符串完成的。例如,对于随avr-gcc一起提供的avr-libc,您可以在此处查看功能列表: avr-libc string.h 您甚至拥有优质的printfavr-libc stdio.h

    如果在代码中添加好的头文件,可以将它们与Arduino一起使用,但要注意代码的大小!仅使用printf可以将大小增加几千字节,这对于微控制器来说可能是巨大的,具体取决于您的需求。

    总而言之,在我看来,唯一可移植的方法是使用char *字符串,http://arduino.cc/en/Reference/String

答案 1 :(得分:2)

新的SafeString Arduino库(可从库管理器中获得)使您可以使用“字符串”类型的操作,而无需使用新建/删除操作。 有关详细的教程,请访问: https://www.forward.com.au/pfod/ArduinoProgramming/SafeString/index.html

尽管该库使用Arduino接口(例如Print和Stream)。可以直接将它们剥离,并使该库成为独立于Arduino的“标准” C ++库。