将 char* 转换为字符串
Convert char* into String
我正在使用 ESP8266 Wifi 芯片和使用 C++ 的 SMING 框架。我有一个 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
变成正确的字符串?
为什么你的做法是错误的:
C 风格字符串是 char
的数组,其中最后一个元素是 0
字节。这就是现在字符串结束处的功能。他们扫描下一个字符,直到找到这个零字节。 C++ string 是一个 class 可以容纳额外的数据。
例如,要获取字符串的长度,可以选择将字符串的长度存储在 class 的成员中,并在每次修改字符串时更新它。虽然这意味着如果字符串被修改需要额外的工作,但它使调用 t length 变得简单而快速,因为它只是 returns 存储的值。
另一方面,对于 C 字符串,length 必须遍历数组并计算字符数,直到找到空字节。因此 strlen
的运行时间取决于字符串的长度。
解决方法:
正如上面所指出的,您必须正确打印它,请尝试以下任一方法:
#include <iostream>
...
std::cout << "rx_data=" << rx_data << std::endl;
或者如果您坚持使用 printf(那为什么要使用 c++?),您可以使用 string::c_str()
, or (since C++11, before the reutrned array might not be null terminated) string::data()
:您的代码将变为:
Serial.printf("rx_data=%s\r",rx_data.c_str());
我建议您查看 std::string 以了解详细信息。事实上,如果你有时间,一本好书可以帮助解释很多重要的概念,包括容器,如 std::string
或 std::vector
。不要假设因为你知道 C,你就知道如何编写 C++。
我正在使用 ESP8266 Wifi 芯片和使用 C++ 的 SMING 框架。我有一个 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
变成正确的字符串?
为什么你的做法是错误的:
C 风格字符串是 char
的数组,其中最后一个元素是 0
字节。这就是现在字符串结束处的功能。他们扫描下一个字符,直到找到这个零字节。 C++ string 是一个 class 可以容纳额外的数据。
例如,要获取字符串的长度,可以选择将字符串的长度存储在 class 的成员中,并在每次修改字符串时更新它。虽然这意味着如果字符串被修改需要额外的工作,但它使调用 t length 变得简单而快速,因为它只是 returns 存储的值。
另一方面,对于 C 字符串,length 必须遍历数组并计算字符数,直到找到空字节。因此 strlen
的运行时间取决于字符串的长度。
解决方法:
正如上面所指出的,您必须正确打印它,请尝试以下任一方法:
#include <iostream>
...
std::cout << "rx_data=" << rx_data << std::endl;
或者如果您坚持使用 printf(那为什么要使用 c++?),您可以使用 string::c_str()
, or (since C++11, before the reutrned array might not be null terminated) string::data()
:您的代码将变为:
Serial.printf("rx_data=%s\r",rx_data.c_str());
我建议您查看 std::string 以了解详细信息。事实上,如果你有时间,一本好书可以帮助解释很多重要的概念,包括容器,如 std::string
或 std::vector
。不要假设因为你知道 C,你就知道如何编写 C++。