2011-11-24 99 views
3

这已经成为C++中最简单的事情了。将int转换为字符串/ char C++/Arduino

..我知道这个问题之前已经被问过很多次了,但是请记住,这是Arduino项目的一部分,并且内存保存是一个主要问题,因为我最多只能使用32256字节。

我需要将整数转换为字符串。

int GSM_BAUD_RATE; 
GSM_BAUD_RATE = 4800; 

Serial.println("GSM Shield running at " + GSM_BAUD_RATE + " baud rate."); 

显然最后一行会给我一个错误。

在此先感谢。

+8

您必须来自java背景。 – Lalaland

+1

为Arduino添加了标签 - 它在这里产生了巨大的差异。 –

+0

@MatteoItalia谢谢马泰奥。 – fuzz

回答

6

如果,因为它似乎,你在一个Arduino工作项目,你应该简单地让Serial对象处理它:

int GSM_BAUD_RATE; 
GSM_BAUD_RATE = 4800; 

Serial.print("GSM Shield running at "); 
Serial.print(GSM_BAUD_RATE); 
Serial.println(" baud rate."); 

因为printprintln方法有重载处理几种不同的类型。

其他方法可以在“正常”的机器是有用的,但这样的东西stringostringstream需要堆分配,其中,上Arduino板,应尽可能避免由于严格的存储器约束。

+0

您赢得Matteo,感谢您注意到它是针对Arduino项目的。 – fuzz

1
int i = 42; 
char buf[30]; 
memset (buf, 0, sizeof(buf)); 
snprintf(buf, sizeof(buf)-1, "%d", i); 
// now buf contains the "42" string. 
0

试试这个:

#include <iostream> 

int GSM_BAUD_RATE; 
GSM_BAUD_RATE = 4800; 
char text[256]; 

sprintf(text, "GSM Shield running at %d baud rate.", GSM_BAUD_RATE); 

Serial.println(text); 
3

UPDATE:这回答了原来的问题,它进行了更新,提的Arduino之前。我要离开它,因为它是非嵌入式系统的正确答案。

您可以使用stringstream创建格式化的字符串,并从中提取string

#include <sstream> 

std::ostringstream s; 
s << "GSM Shield running at " << GSM_BAUD_RATE << " baud rate."; 

Serial.println(s.str().c_str()); // assuming `println(char const *);` 
+0

如果我的猜测是正确的,那么这个代码是针对Arduino项目的 - 并且''在那里不可用(或者,即使它需要堆分配,并且2KB的总RAM也不是好主意)。 –

+0

@MatteoItalia正确。 – fuzz

+0

在这种情况下,您需要其他答案之一。如果你有一个完整的标准库并且可以承担一些内存分配,这是一个更安全的选择。 –

1

你可以使用一个字符串流:

int main() 
{ 
    int myInt = 12345; 
    std::ostringstream ostr; 
    ostr << myInt; 
    std::string myStr = "The int was: " + ostr.str(); 
    std::cout << myStr << std::endl; 
} 
0

这样做的C++方法是提高::格式

std::string str = "GSM blah blah "; 
str+= boost::str(boost::format("%d") % 4800); 
str+= "blah blah"; 
+0

我很确定他不想在Arduino板上使用boost。 –

+0

它需要一个工作标准库,IIRC在Arduino项目中不完全可用。另外,'std :: string'需要堆分配,这不是一个好主意。 –

+0

(顺便说一下,因为“只有标题”意味着“运行时间很少”)? –