2011-11-24 96 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

(順便說一下,因爲「只有標題」意味着「運行時間很少」)? –