【问题标题】:Convert string/char to double and following calculation with the double将字符串/字符转换为双精度并使用双精度进行计算
【发布时间】:2013-06-30 18:43:56
【问题描述】:

我有一个指针指向的字符串,我想将该字符串转换为双精度类型的数字进行计算。但是,我不确定我的字符串是string 还是char*,以及我是否正确访问了指针指向的字符串。以下是我的代码:

void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("I heard: [%s]", msg->data.c_str());
    std::string str = msg->data;
    ROS_INFO("I heard: [%s]", str.c_str());
    double fmsg = std::atof(str.c_str());
    ROS_INFO("I am making calculation: [%d]", fmsg+1.0);
}

无法识别double 类型,因此fmsg+1.0 产生十位左右的数字。有人可以帮忙吗?

【问题讨论】:

  • 你有 '%d' 而不是 '%lf'。

标签: c++ string type-conversion


【解决方案1】:

首先,由于您使用的是c_str,因此您的字符串不能是char* 类型;他们很可能是std::string

此外,您不需要创建字符串的副本:std::string str = msg->data 是多余的(即使它没有坏处)。

至于你得到的错误输出 - Shashwat Kumar 指出你的代码没有正确打印数字,即使数字本身是正确的。如果ROS_INFOprintf 具有相同的语法,则使用%lf%f 格式说明符来打印double 类型的数字:

ROS_INFO("I am making calculation: [%f]", fmsg + 1);

(另外,无需将1 拼写为1.0;如果您认为更好,您可能更喜欢1.0

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多