小编Dar*_*anX的帖子

C23标准向后兼容吗?

C17代码可以解释为C23代码吗?如果没有,有哪些重大变化?

c standards c23

3
推荐指数
1
解决办法
395
查看次数

为什么 PRIx64 打印“lx”而不是 16 个十六进制字符?

我们在工作中遇到了一个问题,我们无法使用<inttypes.h>(PRIx64) 中的“可移植”类型来正确打印十六进制格式的 64 位无符号整数。

uint64_t serial = 0x12345678;
usb_printf("Serial: %"PRIx64"\n", serial);
Run Code Online (Sandbox Code Playgroud)

在哪里

void usb_printf(const char *fmt, ...)
{
    char string[512];
    uint16_t string_length = 0;
    va_list va;

    va_start(va, fmt);
    string_length = vsnprintf(string, ARRAY_SIZE(string), fmt, va);
    bsp_usb_cdc_send_buf((uint8_t *)string, string_length);
    va_end(va);
}
Run Code Online (Sandbox Code Playgroud)

给出

> Serial: lx
Run Code Online (Sandbox Code Playgroud)

它在 LPC55S28 (Cortex-M33) 上运行,并-specs=nosys.specs -specs=nano.specs使用 GCC 链接。

通过查看 PRIx64 定义,它似乎被定义为:

#define __INT64 "ll"
#define __PRI64(x) __INT64 __STRINGIFY(x)
#define PRIx64      __PRI64(x)
Run Code Online (Sandbox Code Playgroud)

为什么可PRIx64移植类型定义在此平台上的行为不符合人们的预期?

c hex 32-bit uint64 cortex-m

2
推荐指数
1
解决办法
110
查看次数

标签 统计

c ×2

32-bit ×1

c23 ×1

cortex-m ×1

hex ×1

standards ×1

uint64 ×1