如何使用 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.
我在 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.