当谈到C ++上的连接时,我总是遇到麻烦,我有一个浮点值即时转换为char数组,然后我试图在该值前面添加一些文本,但我得到一个“?”作为输出,这是代码:
int sensorValue = analogRead(A0);
float voltage= sensorValue * (5.0 / 421.0);
char v[6];
dtostrf(voltage, 6, 2, v);
sprintf(_outbuffer, "VL%s", v);
Serial.println(v);
Serial.println(_outbuffer);
答案 0 :(得分:2)
c++中的字符串连接简单,只需使用+
运算符:
std::string s1("Hello");
std::string s2("World");
std::string concat = s1 + s2; // concat will contain "HelloWorld"
如果您需要高级格式设置功能或数字格式,则可以使用std::ostringstream
类:
std::ostringstream oss;
oss << 1 << "," << 2 << "," << 3 << ", Hello World!";
std::string result = oss.str(); // result will contain "1,2,3, Hello World!"
因此,根据您的情况,您可以使用:
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 421.0);
std::ostringstream oss;
oss << std::fixed << std::setw(6) << std::setprecision(2) << voltage;
std::string v = oss.str();
std::string _outbuffer = "VL" + v;
Serial.println(v.c_str());
Serial.println(_outbuffer.c_str());
注意:强>
要使用iostream操纵器功能(如上所述std::setw()
等),除了#include <ostringstream>
之外,您还需要#include <iomanip>
。
答案 1 :(得分:0)
尝试strcat
char v[15 + 1];
v[15] = 0;
dtostrf(voltage, 6, 2, v);
strcpy(_outbuffer, "VL");
strcat(_outbuffer, v);
或者,正如嫌疑人所建议的那样,使用sprintf。