[英]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
限定词。 确定您为什么拥有它,它是否正确以及是否重要是您的工作。 通常,您不希望使用易失性字符串。 它使使用它不可靠。 (这个答案第一省略volatile
上str_cycles
,然后加入它,现在已经再次省略了。)
使用固定宽度的打印说明符。
#include <inttypes.h>
char buf[9];
sprintf(buf, "%08" PRIX32,total_cycles);
首先转换为int
或unsigned
。 这是%X
期望的类型:
sprintf(str_cycles, "%08X", (unsigned) total_cycles);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.