使用NRF MCU和Zephyr在C++中浮点转换为字符串

qxgroojn  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(116)

我只是想把一个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转换整数可以工作。使用printkLOG_INF记录浮点数也可以。所以,我必须错过一些东西。

b4wnujal

b4wnujal1#

CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_NANO=n添加到项目配置文件中,即使zephyr告诉它已经过时。它修复了字符串错误和sprintf错误。

相关问题