2013-06-30 3 views
0

У меня есть строка, указанная указателем, и я хочу преобразовать эту строку в число двойного типа для вычисления. Тем не менее, я не уверен, является ли моя строка string или char* и правильно ли я получил строку, указанную указателем. Ниже мой код:Преобразование строки/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 результат в десять значных чисел или около того. Может ли кто-нибудь помочь?

+2

У вас есть «% d» вместо «% lf». –

ответ

1

Прежде всего, поскольку вы используете c_str, ваши строки не могут быть типа char*; скорее всего, они std::string.

Кроме того, вам не нужно создавать копию строки: std::string str = msg->data является излишним (хотя это и не мешает).

Что касается плохой производительности, которую вы получаете - Шашват Кумар указывает, что ваш код не печатает номер правильно, даже если само число верно. Если ROS_INFO имеет тот же синтаксис, как printf, используйте %lf или %f спецификатор формата для печати несколько типов double:

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

(также, нет необходимости заклинания 1 в 1.0, вы можете предпочесть 1.0, если вы считаете, что лучше)

Смежные вопросы