字符串与sprintf串联

时间:2014-01-22 21:43:01

标签: c++ c arduino

当谈到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);

2 个答案:

答案 0 :(得分:2)

中的字符串连接简单,只需使用+运算符:

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。