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

How do I display a 64bit unsigned integer with sprintf?

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

uint32_t time_micro32

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

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

中编程

I´m programming in STM32CubeIDE

所以您很可能在它的“nano”版本中使用 newlib - newlib 的较小版本,它不处理打印 64 位变量。

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

更喜欢使用 snprintf 而不是 sprintf

Are there any other options?

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