如何将 `ros::Time` 转换为字符串,同时保持 UNIX 格式?

问题描述 投票:0回答:2

背景: 我有以 UNIX 时间戳作为名称的图像文件,例如

1341846314.694004.png
。这些名称对应于发布图像的 ROS .bag 文件的消息
header.stamp
。 我使用 Python 为每个图像生成了边界框文件,并使用相同的模式来命名它们,例如
1341846314.694004_bb.txt

问题: 我无法将

header.stamp
(类型为
ros::Time
,格式为 UNIX 时间)转换为 C++ 中的字符串。

到目前为止,我读到的每一个资源都告诉我要么使用

header.stamp.toSec()
(这没有帮助,因为相关信息正在丢失),或者将其转换为其他时间格式,然后我将能够转换为字符串(这又没有帮助,因为我需要 UNIX 格式)。

c++ ros unix-timestamp
2个回答
5
投票

时间类在 PythonC++ 中提供秒和纳秒字段。所以你可以使用它们并将它们组合成一个字符串:

Python:

stamp = rospy.Time.now()
print(str(stamp.secs) + '.' + str(stamp.nsecs))

C++:

ros::Time stamp = ros::Time::now();
std::stringstream ss;
ss << stamp.sec << "." << stamp.nsec;
std::cout << ss.str() << std::endl;

两种实现的输出如下:

1612707880.149451971


0
投票

连接“sec”和“.”直接使用“nsec”对于纳秒无效,这需要前导零。

首先使用固定宽度。因为一秒有 1e9 纳秒,所以宽度是 9。

C++:

#include <sstream>
#include <iomanip>

ros::Time stamp = ros::Time::now();
std::string timestamp;
std::stringstream ss;
ss << stamp.sec << "." << std::setw(9) << std::setfill('0') << stamp.nanosec;
timestamp = ss.str();
© www.soinside.com 2019 - 2024. All rights reserved.