intを文字列に変換する/ char C ++/Arduino

これはC ++で行うのが最も簡単なことです。

私はそれがArduinoプロジェクトの一部であり、メモリの節約は大きな問題であることを覚えておいてください。私は最大32256バイトしか持っていません。

整数を文字列に変換する必要があります。

int GSM_BAUD_RATE;
GSM_BAUD_RATE = 4800;

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

明らかに最後の行は私にエラーを与えるだろう。

前もって感謝します。

3
@MatteoItaliaありがとうマッテオ。
追加された 著者 fuzz,
@Insilico将来の参照のために取られたポイント。
追加された 著者 fuzz,
あなたはJavaの背景からでなければなりません。
追加された 著者 Lalaland,
Arduinoのタグが追加されました - ここで大きな違いが大きいです。
追加された 著者 Matteo Italia,
@フルビオ:あなたがArduinoで作業しているという事実は、最初に質問に追加すべきは非常に重要な情報でした。スタックオーバーフローを尋ねるときは、今後どのプラットフォームで作業するかを指定する必要があります。 C ++はさまざまなプラットフォームで使用されています。私たちはあなたがそうでないと言うならば、標準のC ++の機能をデフォルトにします。
追加された 著者 In silico,

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.");

print println メソッドはいくつかの異なる型を処理するためにオーバーロードを持っているからです。

他の方法は通常のマシンでは便利ですが、 string のようなものはヒープ割り当てが必要です。厳密なメモリの制約。

6
追加された
あなたはMatteoに勝ちます、それはArduinoプロジェクトのためのものであることに気付きました。
追加された 著者 fuzz,

UPDATE:Arduinoに言及する前に元の質問に答えます。私は非組み込みシステムの正解であるので、それを残しています。

stringstream を使用して書式設定された文字列を作成し、そこから string を抽出することができます。

#include 

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

Serial.println(s.str().c_str());//assuming `println(char const *);`
3
追加された
@MatteoItalia正しい。
追加された 著者 fuzz,
@MikeSeymourしかし、答えをありがとう、私はそれがArduinoプロジェクトのためだったと述べていたはずです。
追加された 著者 fuzz,
その場合、他の回答の1つが必要になります。あなたが完全な標準ライブラリを持っていて、少しのメモリ割り当てをする余裕があるならば、これはより安全なオプションです。
追加された 著者 Mike Seymour,
私の推測が正しいとすれば、そのコードはArduinoプロジェクト用であり、そこでは は利用できません(またはヒープ割り当てが必要で、2 KBのRAMが必要です良いアイデア)。
追加された 著者 Matteo Italia,
 int i = 42;
 char buf[30];
 memset (buf, 0, sizeof(buf));
 snprintf(buf, sizeof(buf)-1, "%d", i);
//now buf contains the "42" string.
1
追加された

あなたはstringstreamを使うことができます:

int main()  
{
    int myInt = 12345;
    std::ostringstream ostr;
    ostr << myInt;
    std::string myStr = "The int was: " + ostr.str();
    std::cout << myStr << std::endl;
}
1
追加された

これを行うC ++の方法はboost :: formatです

std::string str = "GSM blah blah ";
str+= boost::str(boost::format("%d") % 4800);
str+= "blah blah";
0
追加された
おっと、コメントは「ヘッダーのみなので、外部ライブラリにリンクする必要はありません」とコメントする必要があります。
追加された 著者 Lalaland,
私はArduinoボードでブーストを使用したくないと確信しています。
追加された 著者 Matteo Italia,
これは、IIRCがArduinoプロジェクトで完全に利用可能ではない、作業標準ライブラリを必要とします。また、 std :: string にはヒープ割り当てが必要ですが、これは良い考えではありません。
追加された 著者 Matteo Italia,
(ちなみに、「ヘッダーのみ」は「ランタイムコストが少ない」という理由からです)
追加された 著者 Matteo Italia,

これを試してみてください:

#include 

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);
0
追加された