我只是想把一个float转换成string。通常这是使用C++标准库和to_string(float)
命令来完成的。然而,当我在我的MCU nrf52840上编程时,我得到了垃圾。
这是密码
#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>
#include<float.h>
#include<string>
LOG_MODULE_REGISTER(main);
using namespace std;
int main(void){
float myFloat=3.3;
string str;
str=to_string(myFloat);
char buffer[64];
int ret = snprintf(buffer, sizeof buffer, "%f", myFloat);
if (ret < 0) {
return EXIT_FAILURE;
}
if (ret >= sizeof buffer) {
// / Result was truncated - resize the buffer and retry.
}
LOG_INF("end");
}
项目文件启用了标准C++库:
CONFIG_LOG=y
CONFIG_STD_CPP20=y
CONFIG_CPP_MAIN=y
CONFIG_CPLUSPLUS=y
CONFIG_LIB_CPLUSPLUS=y
在调试过程中,我得到了以下垃圾:
长度完全错误,价值也是。尝试执行相同的任务并转换为字符也会失败。
使用to_string
转换整数可以工作。使用printk
和LOG_INF
记录浮点数也可以。所以,我必须错过一些东西。
1条答案
按热度按时间b4wnujal1#
将
CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_NANO=n
添加到项目配置文件中,即使zephyr告诉它已经过时。它修复了字符串错误和sprintf错误。