没有一种完全可移植的方式来完成这项工作,这很麻烦。
C99为内置类型提供了一种机制,例如
size_t
与
%zu
符号(还有一些额外的,类似的限定符)。
它还提供
<inttypes.h>
包含宏(如prix32)的头,用于定义打印32位十六进制常量的正确限定符(在本例中):
printf("32-bit integer: 0x%08" PRIX32 "\n", var_of_type_int32_t);
对于系统定义的类型(例如由posix定义的类型),afaik,没有好的方法来处理它们。所以,我要做的是对一个“安全”的转换进行一个快速的猜测,然后打印相应的内容,包括演员表,这就是您在问题中所阐述的内容。这是令人沮丧的,但没有更好的方法,我知道。如果有疑问,并且使用c99,那么转换为“无符号长整型”就非常好了;可能有一种情况是使用强制转换
uintmax_t
和Prixmax或同等产品。
或者,作为
FUZxxl
reminded
我,你可以用修改器
j
以指示“max”整数类型。例如:
printf("Maximal integer: 0x%08jX\n", (uintmax_t)var_of_type_without_format_letter);