Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何找到uint\u fast32\t的宽度_C_Printf_Stdint - Fatal编程技术网

C 如何找到uint\u fast32\t的宽度

C 如何找到uint\u fast32\t的宽度,c,printf,stdint,C,Printf,Stdint,我希望能够移植fprintf()auint\u fast32\t,如stdint.h中所定义,并使用所有前导零。例如,如果我的平台将uint\u fast32\t定义为64位无符号整数,我希望fprintf()使用类似%016lX的格式说明符,但如果它是32位无符号整数,我希望使用%08lX 有没有像INTFAST32_BITS这样的宏我可以使用 现在我正在使用 #if UINT_FAST32_MAX == 0xFFFFFFFF # define FORMAT "08"PRIXFAST32

我希望能够移植
fprintf()
a
uint\u fast32\t
,如
stdint.h
中所定义,并使用所有前导零。例如,如果我的平台将
uint\u 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\u fast32\t
,而且代码也有点笨重且难以阅读您可以通过与查找任何其他类型的大小相同的方式找到
uint\u fast32\t
的大小:对其应用
sizeof
运算符。结果的单位是类型
char
的大小。例如:

size_t chars_in_a_uint_fast32_t = sizeof(uint_fast32_t);
但这不足以打印带有
printf
-系列函数之一的文件。如果任何格式化指令与相应参数的类型不匹配,并且
uint\u fast32\t
的大小不足以进行适当匹配,则在
printf
等中会出现未定义的行为

这就是中已经描述的格式化宏的作用。为每种类型和转换提供适当的大小修饰符和转换字母。对于
uint\u fast32\u t
X
转换,相应的宏为
PRIXFAST32

您可以正常提供任何标志、字段宽度和精度。如果确实希望使用与
uint\u fast32\u t
的实际大小相适应的字段宽度,那么一种合理的方法是使用选项指定字段宽度作为参数传递(类型
int
)。因此:


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

您可以保证您的
uint\u fast32\u t
将具有
“至少具有指定的宽度”
。因此您可以保证32位。为什么这不能满足您的限制。它可以是32位或64位,但不能更小。@DavidC.Rankin他们可能希望将其推广到一个假设的
uint48\t
uint128\t
。Re“…提供比您应该允许的任何类型的值更宽的值”:不一定。例如,为多精度算法编写代码是合理的,该算法至少需要32位单元,但适用于实现提供的任何更大的单元。
uint_fast32_t fast;
// ...
printf("%0*" PRIXFAST32 "\n", (int) sizeof(fast) * 2, fast);