将字符串/字符转换为double,然后使用double进行计算

Convert string/char to double and following calculation with the double

本文关键字:double 计算 然后 字符 转换 字符串      更新时间:2023-10-16

我有一个由指针指向的字符串,我想将该字符串转换为双类型数字进行计算。但是,我不确定我的字符串是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会产生十位数左右的数字。有人能帮忙吗?

首先,由于您使用的是c_str,因此字符串的类型不能为char*;最有可能是CCD_ 7。

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

至于你得到的糟糕输出——Shashwat Kumar指出,即使数字本身是正确的,你的代码也没有正确打印数字。如果ROS_INFO的语法与printf相同,请使用%lf%f格式说明符打印类型为double:的数字

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

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