使用 NRF MCU 和 Zephyr 在 C++ 中浮点到字符串

float to string in C++ using NRF MCU and Zephyr

提问人:Yann 提问时间:6/24/2023 更新时间:6/25/2023 访问量:318

问:

我只想将浮点数转换为字符串。通常,这是使用 C++ 标准库和命令完成的。但是,当我在 MCU nrf52840 上编程时,我遇到了垃圾。to_string(float)

这是代码

#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

在调试期间,我得到了以下垃圾:

enter image description here

长度和值是完全错误的。 尝试执行相同的任务并转换为字符也会失败。

使用 works 转换整数。 并且日志记录浮动使用 并且也有效。因此,我必须错过一些东西。to_stringprintkLOG_INF

C++ 字符串 浮点 nrf52840

评论

0赞 Eljay 6/24/2023
在调试过程中,当调试器显示该状态时,您在源代码中的哪一行?
0赞 Yann 6/25/2023
最后将断点放在 'LOG_INF(“end”);;

答:

0赞 Yann 6/25/2023 #1

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