繁体   English   中英

如何在十六进制的uint32_t上执行sprintf并将其存储到字符串中?

[英]How to do a sprintf on a uint32_t hexidecimal to and store it into a string?

我正在运行一个计时器来计算程序的效率,我需要将其输出到超级终端。 因此,我需要对uint32_t十六进制执行sprintf来将其存储到字符串中。 但是我在%08X上一直遇到错误。 那我该怎么用呢? 我尝试使用%ll%lu但警告仍然存在。

volatile char str_cycles=0;
volatile uint32_t total_cycles = 0x00ffffff - current_time;
sprintf(str_cycles, "%08X",total_cycles);

谁能帮我这个?

您应该得到一个错误,因为str_cycles显示为volatile char str_cycles; (一个字符)。

您应该使用<inttypes.h>和:

char str_cycles[16];

snprintf(str_cycles, sizeof(str_cycles), "%08" PRIX32, total_cycles);

通常, snprintf()应该比sprintf()更可取,但是如果您分配了足够的空间,那么使用sprintf()完全可以。

我也不相信volatile限定词。 确定您为什么拥有它,它是否正确以及是否重要是您的工作。 通常,您不希望使用易失性字符串。 它使使用它不可靠。 (这个答案第一省略volatilestr_cycles ,然后加入它,现在已经再次省略了。)

使用固定宽度的打印说明符。

#include <inttypes.h>
char buf[9];
sprintf(buf, "%08" PRIX32,total_cycles);

首先转换为intunsigned 这是%X期望的类型:

sprintf(str_cycles, "%08X", (unsigned) total_cycles);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM