检查对象是否为字符串的最有效方法

纳乔

我得到一个对象(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];
}
...

我关心效率,因为这是每秒运行多次的for循环的一部分。

基本结构是来自特定主题ROS消息,并且基本上可以具有任何数据类型。在这种情况下,我使用LaserScan消息,文档中没有提到range[x]可以返回“ inf”的消息

塞尔吉·巴莱斯塔(Serge Ballesta)

根据ROS文档,scan->ranges是一个float数组。这是有道理的,因为distnot字符串表示形式ranges[0]为not时,将其添加到float()中inf

这意味着(如MSalters在其注释中所猜测的),您具有一个真正的浮点值,并且您只想确保它是一个实数,并且既不是无限值也不是NaN(不是数字)值。

因此,只要您包含cmath(或math.h),就可以使用C分类宏来确定数字是有限的(但允许使用非正规值)还是普通的(甚至拒绝非正规值):

void scan_cb(const sensor_msgs::LaserScan::ConstPtr& scan)
{
float dist = 0.0f;

if(isfinite(scan->ranges[0])){
    dist += scan->ranges[0];
}
...

(有关Wikipedia上浮点数的IEEE-754表示形式的更多参考资料

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查对象是否有效

Python中检查对象属性是否分配了DataFrame的最有效方法?

检查字符串是否属于数组的最有效/更快的方法

检查所有给定的n个对象是否相同或不同的最有效方法?

确定值是否为字符串的最有效方法

检查对象是否为JavaScript中的字符串

检查对象是否具有使用字符串变量定义的函数

检查对象参数是否全部都需要属性的最有效方法是什么?

检查给定字符串是否为C回文的有效方法

检查Unicode字符串是否为NFC在Python中的有效方法?

寻找将已知格式的字符串解析为Typescript对象数组的最有效方法

对于包含多个单词的输入字符串-检查其中是否有其他字符串开头的最有效方法是什么?

检查给定的字符串是否为转换DateTime的有效格式字符串

连接字符串的最有效方法

连接字符串的最有效方法?

查找字符串是否混合的最有效方法

给定用户字符串输入,如何检查对象是否在数组中

使用字段字符串检查对象是否存在

Django如何检查对象是否在多个字段中包含字符串

液体:检查对象是否包含某些字符串

Python 基础知识:检查对象是否在字符串集中

检查字符串数组中是否存在字符串的有效方法

有什么方法可以检查对象是否为微风实体对象?

检查对象是否为空的更短方法?

如何检查对象是否为方法定义?

检查对象是否为QuerySet

检查对象是否为 Byte[]

有什么方法可以检查对象是否为TypeScript中的枚举类型?

检查字符串是否为有效数字(根本没有字母)