如何使用 sprintf 显示 64 位无符号整数?

问题描述

我正在我的腻子控制台上显示一个 32 位计时器值。计时器包括自 stm32wb55 启动以来的时间(以微秒为单位)。使用以下代码,它可以像我想要的那样工作:

uint32_t time_micro32

sprintf((char*)buf,"Time: %lu \r\n",(time_micro32));

但现在,我想用 uint64_t time_micro64 以 64 位分辨率显示时间。我尝试了很多,但没有任何效果。有人可以帮我吗?我正在 STM32CubeIDE 中编程

解决方法

我正在 STM32CubeIDE 中编程

因此,您很可能在“纳米”版本中使用 newlib - 较小版本的 newlib,不处理打印 64 位变量。

与完整的 newlib 版本(或使用其他 C 标准库)链接,代码将正常工作。搜索您的 gui - 应该有一个选项,例如“使用标准库的 -nano 版本”或“将 -specs=nano.specs 传递给编译器”。取消选中该选项。确保 -lnano-specs=nano.specs 或类似选项没有传递给编译器。之后,您可以使用 %llu"%"PRIu64

还有其他选择吗?

滚动您自己的实现,将 64 位变量转换为字符串 - 编写这样的函数非常简单。然后使用此函数并打印结果字符串。我有such function