Конвертировать char * в String

Я использую чип WSP ESP8266 с платформой SMING, которая использует C ++. У меня есть функция tcpServer, которая получает данные от порта TCP. Я хотел бы конвертировать входящие char *data в тип данных String. Это то, что я сделал.

bool tcpServerClientReceive(TcpClient& client, char *data, int size)
{
String rx_data;
rx_data = String(data);
Serial.printf("rx_data=%s\r",rx_data);
}

Содержание rx_data это мусор. Что не так с кодом? Как сделать rx_data в правильную строку?

-1

Решение

Почему то, что вы делаете неправильно:

Строка стиля C представляет собой массив char где последний элемент является 0 Байт. Вот как теперь работает, где заканчивается строка. Они сканируют следующий символ, пока не найдут этот нулевой байт. C ++ строка это класс, который может содержать дополнительные данные.

Например, чтобы получить длину строки, можно сохранить длину перемешивания в члене класса и обновлять ее при каждом изменении строки. Хотя это означает дополнительную работу, если строка модифицирована, она делает длину вызова t тривиальной и быстрой, поскольку она просто возвращает сохраненное значение.

Для строк C, с другой стороны, длина должна перебирать массив и считать количество символов, пока не найдет нулевой байт. таким образом, runime strlen зависит от длины струны.

Решение:

Как указано выше, вы должны распечатать его правильно, попробуйте либо:

#include <iostream>
...
std::cout << "rx_data=" << rx_data << std::endl;

или если вы настаиваете на printf (зачем тогда использовать c ++?), вы можете использовать либо string::c_str(), или (начиная с C ++ 11, до того, как возвращаемый массив не может быть завершен нулем) string::data(): ваш код станет:

Serial.printf("rx_data=%s\r",rx_data.c_str());

Я хотел бы предложить вам взглянуть на станд :: строка чтобы получить представление о деталях. На самом деле, если у вас есть время, хорошая книга может помочь объяснить множество важных понятий, включая контейнеры, такие как std::string или же std::vector, Не думайте, что, поскольку вы знаете C, вы знаете, как писать на C ++.

2

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

Других решений пока нет …

По вопросам рекламы [email protected]