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.010 桁程度の数字になります。誰でも助けてもらえますか?

4

1 に答える 1

1

まず第一に、あなたは を使用しているのでc_str、あなたの文字列は型にすることはできませんchar*; おそらくそうですstd::string

さらに、文字列のコピーを作成する必要はありません: 不要ですstd::string str = msg->data(害はありませんが)。

あなたが得た悪い出力については、Shashwat Kumar は、数値自体は正しいにもかかわらず、あなたのコードは数値を正しく出力しないと指摘しています。ROS_INFOと同じ構文の場合は、またはフォーマット指定子をprintf使用して、型の数を出力します。%lf%fdouble

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

1(また、 のように綴る必要はありません1.01.0

于 2013-06-30T20:03:42.230 に答える