打印uint_fast系列及对应有符号快速整数类型的可移植正确方法是什么
快速整数类型的可移植打印方法
正确的可移植打印方式是使用C标准库<inttypes.h>头文件中提供的专用格式转换宏,无需手动判断类型长度,就能跨平台适配不同架构下uint_fast*_t、int_fast*_t的实际宽度,兼容C99及以上所有符合标准的编译环境。
无符号快速类型对应打印宏
uint_fast8_t对应十进制打印宏:PRIuFAST8,调用示例:printf("%" PRIuFAST8 "\n", val);uint_fast16_t对应十进制打印宏:PRIuFAST16uint_fast32_t对应十进制打印宏:PRIuFAST32uint_fast64_t对应十进制打印宏:PRIuFAST64
如果需要打印八进制、十六进制格式,只需把宏中代表无符号十进制的u替换为对应格式符即可:
- 八进制替换为
o,比如PRIoFAST8对应uint_fast8_t的八进制打印 - 小写十六进制替换为
x,大写十六进制替换为X,比如PRIXFAST32对应uint_fast32_t的大写十六进制打印
有符号快速类型对应打印宏
和无符号类型规则一致,有符号int_fast*_t系列的格式宏以PRId/PRIi开头:
int_fast8_t对应十进制打印宏:PRIdFAST8int_fast16_t对应十进制打印宏:PRIdFAST16int_fast32_t对应十进制打印宏:PRIdFAST32int_fast64_t对应十进制打印宏:PRIdFAST64
完整使用示例
#include <stdio.h> #include <inttypes.h> int main(void) { uint_fast16_t u_test = 65530U; int_fast64_t s_test = -9876543210LL; // 打印无符号快速类型 printf("uint_fast16_t 十进制值:%" PRIuFAST16 "\n", u_test); printf("uint_fast16_t 十六进制值:0x%" PRIxFAST16 "\n", u_test); // 打印有符号快速类型 printf("int_fast64_t 十进制值:%" PRIdFAST64 "\n", s_test); return 0; }
内容的提问来源于stack exchange,提问作者Aval Sarri
相关产品推荐
相关产品推荐

