- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们在工作中遇到了一个问题,即我们无法使用 <inttypes.h>
(PRIx64) 中的“可移植”类型来正确打印十六进制格式的 64 位无符号整数。
uint64_t serial = 0x12345678;
usb_printf("Serial: %"PRIx64"\n", serial);
哪里
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);
}
给出
> Serial: lx
它在 LPC55S28 (Cortex-M33) 上运行,并使用 GCC 与 -specs=nosys.specs -specs=nano.specs
链接。
通过查看 PRIx64 定义,它的定义似乎是:
#define __INT64 "ll"
#define __PRI64(x) __INT64 __STRINGIFY(x)
#define PRIx64 __PRI64(x)
为什么 PRIx64
可移植类型定义在此平台上的行为不符合预期?
最佳答案
newlib-nano 不支持 float (需要告诉链接器链接支持)并且 printf
不支持 long long
数字(并且没有添加支持的方式)。
如果您想打印 long long
数字,则不得使用 nano.specs
Nano 文档明确指出
enable-newlib-io-pos-args
enable-newlib-io-c99-formats
enable-newlib-io-long-long
enable-newlib-io-long-double
不支持构建选项。因此,即使使用这些选项重建库也不会添加支持。
结论:
long long
打印函数。一般说明:当您对微 Controller 进行编程时,您应该忘记在对大型机器(例如 PC 计算机)进行编程时通常使用的许多东西,尤其是 malloc
样式分配和花哨的 printf
格式。
关于c - 为什么 PRIx64 打印 "lx"而不是 16 个十六进制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77391097/
我遵循以下指南: Debugging kernel and modules via gdb 当我尝试使用以下命令加载模块符号时:(gdb) lx-符号 gdb 说命令未定义。如何将这些辅助命令添加到
我已经尝试用谷歌搜索第一个 %lx,但我没有得到好的结果,但我已经成功搜索了 %ld,它只是一个 long int。我猜是打印地址所必需的,但是 %lx 是做什么用的? 这是我感到困惑的地方: int
我正在尝试使用此模块将散列转换为 XML 字符串 XML::Hash::LX但我只得到第一个哈希键。谁能告诉我,如何获得整个哈希值? #!/usr/bin/env perl use warnings;
我最近开始使用 LumX 框架,我尝试使用他们的 Selects 指令 here ,但我不清楚他们的文档。这是我到目前为止所得到的:
我们在工作中遇到了一个问题,即我们无法使用 (PRIx64) 中的“可移植”类型来正确打印十六进制格式的 64 位无符号整数。 uint64_t serial = 0x12345678; usb_p
我想知道确定 EXE 文件的 MZ 部分结束位置以及附加的扩展可执行文件开始位置(可以是 PE/LE/LX/NE/COFF 等...)的最佳方法是什么。 我找到了这个网站:http://www.del
我正在使用 Eigen 分解稀疏 SPD 矩阵 A。它将是 LLt 或 LDLt 分解 (Cholesky),因此我们可以假设矩阵将分解为D 对角线(可能是恒等式)。如果我这样做 SolverClas
我经常遇到长文件名的 DLL,就这样。例如只有两个:"api-ms-win-appmodel-runtime-l1-1-1.dll" 或 "api-ms-win-appmodel-identity-l
我正在尝试加载 lx-符号从内核。但它不断向我显示以下错误: (gdb) lx-symbols loading vmlinux Python Exception Cannot access memo
/android/kernel/arch/arm/mm/rodata.c:91:4: warning: format '%lx' expects argument of type 'long unsi
我是一名优秀的程序员,十分优秀!