массивы — объединение char [] и uint32_t в переполнении стека

Я хочу объединить char [] с uint32_t, чтобы получить другой char [] в результате:

char word[] = "hi";
uint32_t = 33;

char result[] = "hi33"; //How can I get this ???

Цель состоит в том, чтобы собрать некоторые данные, которые могут быть переданы WriteData описанный метод Вот со следующей подписью …

bool WriteData(char *buffer, unsigned int nbChar);

1

Решение

Для записи в последовательный порт Arduino с использованием этой библиотеки вы должны сделать это:

int _tmain(int argc, _TCHAR* argv[]) {
Serial* SP = new Serial("COM3");
HDC dc = GetDC(NULL);
char word[25];
uint8_t n;
uint32_t r, g, b;
while (SP->IsConnected()) {
n = sprintf_s(word,"%dr%dg%db\n",r,g,b);
SP->WriteData(word, n-1);
}
return 0;
}

sprintf_s возвращает длину буфера, который вы хотите записать, вы можете использовать это как параметр функции WriteData.

1

Другие решения

Вы бы сделали:

std::string word = "hi";
uint32_t num = 33;
std::string result = word + std::to_string(num);

(без std:: если у вас есть using namespace std)

В идеале вы бы не использовали char[] потому что нет причин.

При необходимости string может быть построен из char[]

char word[] = "hi";
std::string result {word};

Удаление const классификатор может быть опасным, но если такой метод, как WriteData известно, что он безопасен (то есть не изменяет содержимое своего параметра), тогда его можно вызвать так

WriteData(const_cast<char *>(result.c_str()), result.length());
4

В этом случае вы можете использовать std :: string, но когда вы используете char [], вы можете использовать:

sprintf( result, "%s%u", word, num );

В случае использования строки у вас есть несколько способов:
Первый способ:

auto result = word + std::to_string(num);

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

ostringstream oss;
oss << word << num;

и результат может быть:

oss.str();
2

использование std::ostringstream:

static const char word[] = "Elephant";
std::ostringstream stream;
stream << word << 33;
std::string text;
text = stream.str();
1

Одна из альтернатив:

std::string word = "hi";
std::uint32_t num = 33;

auto result = word + std::to_string(num);
1
По вопросам рекламы [email protected]