gpt4 book ai didi

c - 如何找到 uint_fast32_t 的宽度

转载 作者:行者123 更新时间:2023-12-04 01:24:50 25 4
gpt4 key购买 nike

我希望能够移植 fprintf() uint_fast32_t,如 stdint.h 中所定义,所有前导零。例如,如果我的平台将 uint_fast32_t 定义为 64 位无符号整数,我希望 fprintf() 具有格式说明符,如 %016lX ,但如果它是 32 位无符号整数,我想使用 %08lX

我可以在某处使用像 INTFAST32_BITS 这样的宏吗?

我现在正在使用

#if UINT_FAST32_MAX == 0xFFFFFFFF
# define FORMAT "08"PRIXFAST32
#elif UINT_FAST32_MAX == 0xFFFFFFFFFFFFFFFF
# define FORMAT "016"PRIXFAST32
#endif

但这只适用于正好是 32 或 64 位宽的 uint_fast32_t,而且代码也有点笨拙且难以阅读

最佳答案

您可以像查找任何其他类型的大小一样查找 uint_fast32_t 的大小:通过对其应用 sizeof 运算符。结果的单位是类型char 的大小。示例:

size_t chars_in_a_uint_fast32_t = sizeof(uint_fast32_t);

但这对于使用 printf 系列函数之一进行打印是不够的。 printf et 中出现未定义的行为。 al. 如果任何格式化指令与相应参数的类型不匹配,并且 uint_fast32_t 的大小信息不足以进行正确匹配。

这是your other answer 中描述的格式化宏所在的位置进来。这些为每种类型和转换提供适当的大小修饰符和转换字母。对于 uint_fast32_tX 转换,适当的宏是 PRIXFAST32

您照常提供任何标志、字段宽度和精度。如果您确实想使用适合 uint_fast32_t 实际大小的字段宽度,那么一个合理的方法是利用选项来指定字段宽度作为一个参数(int 类型)。因此:

uint_fast32_t fast;
// ...
printf("%0*" PRIXFAST32 "\n", (int) sizeof(fast) * 2, fast);

但是,我注意到,这似乎有点可疑,因为您正在为比一般情况下更宽的值做准备,您应该允许该类型的任何值变成。 printf 函数在任何情况下都不会打印比表达值所需的数字更少的数字,假设它确实是指定的类型,所以我倾向于简单地使用一个固定的字段宽度足以32 位整数(比如 8)。

关于c - 如何找到 uint_fast32_t 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62090820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com