无符号字符* 在 C++ 中加倍

unsigned char* to double in c++

本文关键字:C++ 字符 无符号      更新时间:2023-10-16

我通过以下方式将双精度值复制到无符号字符*中。

    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] = '';

从cmdBody我需要将值转换为双精度类型。怎么办?

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

需要注意的是,在构造std::string时不需要分配、memcopy或 null 终止。这大大简化了您的代码。

使用 std::stod ,像这样:

#include <string>
double d = std::stod(cmdBody);
std::istringstream istream(std::string("3.14"));
double d;
istream >> d;
if (!istream.fail())
{
// convertion ok
}