unsigned char *在c ++中加倍

时间:2015-01-23 11:32:37

标签: c++ type-conversion

我将以下列方式将double值复制到unsigned char *。

    unsigned char* cmdBody;
    double val = (double)-1;
    std::ostringstream sstream;
    sstream << val;
    std::string valString = sstream.str();

    unsigned int dataSize = valString.size() + 1;
    cmdBody = (unsigned char*)malloc(dataSize);
    memset(cmdBody, 0, dataSize);
    memcpy(cmdBody, (unsigned char*)valString.c_str(), dataSize - 1);
    cmdBody[dataSize - 1] = '\0';

从cmdBody我需要将值转换为double类型。怎么做?

3 个答案:

答案 0 :(得分:4)

C多吗?

如果您只使用std::string

,那么您的解决方案非常简单
const auto val = -1.0; // Input double
const auto cmdBody = std::to_string(val); // Convert double to a std::string
const auto foo = std::stod(cmdBody); // Convert std::string to a double

重要的是要注意,在构造memcopy时无需分配std::string或空终止。这极大地简化了您的代码。

答案 1 :(得分:2)

使用std::stod,如下所示:

#include <string>
double d = std::stod(cmdBody);

答案 2 :(得分:0)

std::istringstream istream(std::string("3.14"));
double d;
istream >> d;
if (!istream.fail())
{
// convertion ok
}