将 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);
  1. argv[0]为程序名;你可能是指 argv[1]argv[2].
  2. 你的日志输出有误; %ld 表示 long int,而不是 floatdouble。试试 %f.