将指向char的指针转换为双C ++

时间:2011-03-09 20:55:13

标签: c++

如何将指向char的指针转换为double?
我正在使用命令行参数,其中一个参数是double,但在程序中它是作为char *传递的 我尝试使用static_cast和reinterpret_cast但没有效果。

7 个答案:

答案 0 :(得分:3)

纯C ++解决方案:

#include <sstream>

// ...

std::stringstream ss;
ss << your_char_pointer;
ss >> your_double;

提升解决方案:

#include <boost/lexical_cast.hpp>

// ...

your_double = boost::lexical_cast<double>(your_char_pointer);

答案 1 :(得分:3)

答案 2 :(得分:3)

double val = atof(*charpointer)

atof代表“all to float”,(或“array to float”),并且完全符合您的要求。如果它无法转换char数组,则返回0.0。请参阅:Man atof

答案 3 :(得分:1)

这不是C / C ++中的类型转换的工作原理。您必须手动将字符串传递给数字解析器。 E.g。

char *thestring;
double d;
d = atof(thestring);

答案 4 :(得分:1)

如果double来自命令行,它实际上是一个真正的字符串,你必须将其转换为double,你不能只是强制转换它。

例如,您可以使用strtod执行此任务:

double d = strtod (mystr,NULL);

答案 5 :(得分:1)

您正在尝试将字符串(由char *表示)转换为double。对于C ++中的常规内置类型转换,您无法做到这一点,因为他们所做的就是重新解释指针引用的位模式。相反,您必须解析命令行参数以从字符串中提取double值。

如上所述,您有几种选择:

  • 您可以使用atof进行转换,但很难确定转换是否出错,因为无法转换的字符串和代表0.0的字符串都会为您提供相同的结果
  • 正如Fred Larson所说,你可以使用boost::lexical_cast。这是处理问题的一种非常优雅的方式,很可能是我的首选
  • 您可以使用iostream进行转换
  • 您可以自己编写转换代码(开玩笑)

答案 6 :(得分:0)

atof手册页说“stofod()已弃用atof()函数,不应在新代码中使用。”