将字符* 转换为字符串

Convert char* into String

本文关键字:字符串 转换 字符      更新时间:2023-10-16

我正在使用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::stringstd::vector。不要以为因为你知道C,你就知道如何写C++。