-1
我得到一个对象(msg.data
)是一个数字或一个字符串。如果它是一个字符串,我不想使用它,如果它是我想要的数字。目前,我解决了这个问题与ostringstream
,但我觉得有办法更好的解决方案:最有效的方法,如果对象是一个字符串
void scan_cb(const sensor_msgs::LaserScan::ConstPtr& scan)
{
float dist = 0.0f;
std::ostringstream s;
s << scan->ranges[0]; // can be string (always "inf") or a float
if(s.str() != "inf"){
dist += scan->ranges[0];
}
...
我在乎效率,因为这是运行的每个许多次循环的一部分。
的基本结构是一个ROS消息,从某一主题的到来,并且可以具有基本上任何数据类型。 在这种情况下,我使用LaserScan message,文件没有提到range[x]
可以返回“INF”。
你对象是*始终*字符串(上wikipedia浮点数的IEEE-754表示更多的参考资料)。你想要做的是解析字符串。 – StoryTeller
我试图澄清,我的对象是'msg.data',它不清楚这是什么类型。 – Jonas
* * msg.data是怎么声明的? –