如何将指向char的指针转换为double?
我正在使用命令行参数,其中一个参数是double,但在程序中它是作为char *传递的
我尝试使用static_cast和reinterpret_cast但没有效果。
答案 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的字符串都会为您提供相同的结果boost::lexical_cast
。这是处理问题的一种非常优雅的方式,很可能是我的首选答案 6 :(得分:0)
atof
手册页说“stofod()已弃用atof()函数,不应在新代码中使用。”