将字符* 转换为字符串
Convert char* into String
我正在使用ESP8266 Wifi芯片和使用该C++的SMING框架。我有一个从TCP端口接收数据的tcpServer函数。我想将传入的char *data
转换为字符串数据类型。这就是我所做的。
bool tcpServerClientReceive(TcpClient& client, char *data, int size)
{
String rx_data;
rx_data = String(data);
Serial.printf("rx_data=%sr",rx_data);
}
rx_data
的内容物是垃圾。代码有什么问题?如何使rx_data
变成合适的字符串?
为什么你做的事情是错误的:
C 样式字符串是一个char
数组,其中最后一个元素是0
字节。这就是字符串结束处的函数方式。他们扫描下一个字符,直到找到这个零字节。C++字符串是一个可以保存其他数据的类。
可以选择将 stirng 的长度存储在类的成员中,并在每次修改字符串时更新它。虽然这意味着如果字符串被修改,它会使调用 t 长度变得简单而快速,因为它只是返回存储的值。
另一方面,对于 C 字符串,长度必须遍历数组并计算字符数,直到找到空字节。 因此,strlen
的符文取决于字符串的长度。
解决方案:
如上所述,您必须正确打印它,请尝试:
#include <iostream>
...
std::cout << "rx_data=" << rx_data << std::endl;
或者如果你坚持使用printf(那为什么要使用C ++?(,你可以使用string::c_str()
,或者(从C++11开始,在reutrned数组可能不是null终止之前(string::data()
: 你的代码将变成:
Serial.printf("rx_data=%sr",rx_data.c_str());
我建议你看看std::string以了解细节。事实上,如果你有时间,一本好书可以帮助解释很多重要的概念,包括容器,如std::string
或std::vector
。不要以为因为你知道C,你就知道如何写C++。
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组