Конвертировать int в строку / символ C ++ / Arduino - PullRequest
3 голосов
/ 25 ноября 2011

Это должно быть проще всего сделать в C ++.

.. и я знаю, что об этом спрашивали много раз прежде, однако имейте в виду, что это часть проекта Arduino, и экономия памяти является серьезной проблемой, поскольку у меня есть только 32256 байт для игры.

Мне нужно преобразовать целое число в строку.

int GSM_BAUD_RATE;
GSM_BAUD_RATE = 4800;

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

Очевидно, что последняя строка выдаст мне ошибку.

Заранее спасибо.

Ответы [ 6 ]

6 голосов
/ 25 ноября 2011

Если, похоже, вы работаете над проектом 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 и ostringstream требуют выделения кучи, чего, по возможности, на плате Arduino следует избегать из-за строгих ограничений памяти. *

3 голосов
/ 25 ноября 2011

ОБНОВЛЕНИЕ: это отвечает на оригинальный вопрос, прежде чем он был обновлен, чтобы упомянуть 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 *);`
1 голос
/ 25 ноября 2011

Вы можете использовать поток строк:

int main()  
{
    int myInt = 12345;
    std::ostringstream ostr;
    ostr << myInt;
    std::string myStr = "The int was: " + ostr.str();
    std::cout << myStr << std::endl;
}
1 голос
/ 25 ноября 2011
 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 голосов
/ 25 ноября 2011

Для этого в C ++ используется метод boost :: format

std::string str = "GSM blah blah ";
str+= boost::str(boost::format("%d") % 4800);
str+= "blah blah";
0 голосов
/ 25 ноября 2011

Попробуйте это:

#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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...