将 argv 参数转换为 double
Converting argv arguments to double
我已经在 Ros 中创建了一个 .srv 文件。其结构如下。
float64 a
float64 a
---
bool response
现在我尝试将 argv
中的字符读取为 float
。
无论我传递哪个值,我的输出总是相同的。
输出:
check Numbers
a: 94290532670520
b: 0
我的错误在哪里?
提前致谢。
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
if (argc != 3) {
RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "usage: add_two_ints_client theta x");
return 1;
}
std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_client");
rclcpp::Client<robot_control::srv::RobotControl>::SharedPtr client =
node->create_client<robot_control::srv::RobotControl>("add_two_ints");
auto request = std::make_shared<robot_control::srv::RobotControl::Request>();
request->theta = std::atof(argv[0]);
request->x = std::atof(argv[1]);
// request->theta = std::atoll(argv[1]);
// request->x = std::atoll(argv[2]);
RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "check Numbers\na: %ld" " b: %ld",
request->theta, request->x);
argv[0]
为程序名;你可能是指 argv[1]
和 argv[2]
.
- 你的日志输出有误;
%ld
表示 long int
,而不是 float
或 double
。试试 %f
.
我已经在 Ros 中创建了一个 .srv 文件。其结构如下。
float64 a
float64 a
---
bool response
现在我尝试将 argv
中的字符读取为 float
。
无论我传递哪个值,我的输出总是相同的。
输出:
check Numbers
a: 94290532670520
b: 0
我的错误在哪里? 提前致谢。
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
if (argc != 3) {
RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "usage: add_two_ints_client theta x");
return 1;
}
std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_client");
rclcpp::Client<robot_control::srv::RobotControl>::SharedPtr client =
node->create_client<robot_control::srv::RobotControl>("add_two_ints");
auto request = std::make_shared<robot_control::srv::RobotControl::Request>();
request->theta = std::atof(argv[0]);
request->x = std::atof(argv[1]);
// request->theta = std::atoll(argv[1]);
// request->x = std::atoll(argv[2]);
RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "check Numbers\na: %ld" " b: %ld",
request->theta, request->x);
argv[0]
为程序名;你可能是指argv[1]
和argv[2]
.- 你的日志输出有误;
%ld
表示long int
,而不是float
或double
。试试%f
.