0

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

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十位左右的数字。有人可以帮忙吗?

4

1 回答 1

1

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

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

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

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

(另外,不需要拼写11.01.0如果您认为它更好,您可能更喜欢)

于 2013-06-30T20:03:42.230 回答