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

时间:2013-12-13 15:16:36

标签: c printf

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

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

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:5)

您应该收到错误,因为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限定符;你的工作是确定你拥有它的原因以及它是否正确以及是否重要。通常,您不需要易变的字符串;它使得使用它不可靠。 (这个答案首先省略volatile上的str_cycles,然后添加它,现在又省略了它。)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

首先投放到intunsigned。这是%X所期望的类型:

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