打印float log数据

精度精确到千分位 

#define NRF_LOG_FLOAT_MARKER "%s%d.%03d"   //%0.3就是小数点后面的精度

#define NRF_LOG_FLOAT(val) (uint32_t)(((val) < 0 && (val) > -1.0) ? "-" : ""),   \
                           (int32_t)(val),                                       \
                           (int32_t)((((val) > 0) ? (val) - (int32_t)(val)       \
                                                : (int32_t)(val) - (val))*1000)

//(val))*1000 就是小数点精度计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题涉及到正则表达式和C++文件操作,需要用到 `<regex>` 和 `<fstream>` 库。下面是代码示例: ```cpp #include <iostream> #include <fstream> #include <regex> #include <vector> using namespace std; struct LogData { float pose_x; float pose_y; long int time_; int um; int opt_x; int opt_y; float current; int fream; }; int main() { ifstream log_file("log.txt"); if (!log_file.is_open()) { cerr << "Failed to open log file." << endl; return -1; } string line; regex pattern("pose_x:(-?\\d+\\.\\d+)\\s*,\\s*pose_y:(-?\\d+\\.\\d+)\\s*,\\s*time_:(-?\\d+)\\s*,\\s*um:(-?\\d+)\\s*,\\s*opt_x:(-?\\d+)\\s*,\\s*opt_y:(-?\\d+)\\s*,\\s*current:(-?\\d+\\.\\d+)\\s*,\\s*fream:(-?\\d+)"); smatch match_results; vector<LogData> log_data_vec; while (getline(log_file, line)) { if (regex_search(line, match_results, pattern)) { LogData data; data.pose_x = stof(match_results[1]); data.pose_y = stof(match_results[2]); data.time_ = stol(match_results[3]); data.um = stoi(match_results[4]); data.opt_x = stoi(match_results[5]); data.opt_y = stoi(match_results[6]); data.current = stof(match_results[7]); data.fream = stoi(match_results[8]); log_data_vec.push_back(data); } } log_file.close(); // 打印读取结果 for (const auto& data : log_data_vec) { cout << "pose_x: " << data.pose_x << ", pose_y: " << data.pose_y << ", time_: " << data.time_ << ", um: " << data.um << ", opt_x: " << data.opt_x << ", opt_y: " << data.opt_y << ", current: " << data.current << ", fream: " << data.fream << endl; } return 0; } ``` 这里的正则表达式比较复杂,需要解释一下: ``` pose_x:(-?\d+\.\d+)\s*,\s*pose_y:(-?\d+\.\d+)\s*,\s*time_:(-?\d+)\s*,\s*um:(-?\d+)\s*,\s*opt_x:(-?\d+)\s*,\s*opt_y:(-?\d+)\s*,\s*current:(-?\d+\.\d+)\s*,\s*fream:(-?\d+) ``` - `pose_x:` 匹配变量名 "pose_x" 。 - `(-?\d+\.\d+)` 匹配变量值,包括可选的负号、数字和小数点。 - `\s*,\s*` 匹配逗号,并允许前后存在任意数量的空格。 - `time_:` 匹配变量名 "time_" 。 - `(-?\d+)` 匹配变量值,包括可选的负号和数字。 - 其他变量类似。 读取到每一行数据后,我们用 `regex_search` 函数来匹配正则表达式,并将匹配结果存储到 `match_results` 中。然后我们将匹配结果中的字符串转换成相应的数据类型,并存储到 `LogData` 结构体中,最后将结构体存储到 `log_data_vec` 容器中。最后,我们可以遍历容器并打印出读取结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值