固定宽度整数的格式说明符?

时间:2009-04-22 20:19:30

标签: c

在处理int32_t,uint16_t和int8_t等类型时,printf使用什么格式说明符?

使用%d,%i等不会产生便携式程序。使用PRIxx宏是最好的方法吗?

2 个答案:

答案 0 :(得分:3)

  

使用PRIxx宏是最好的方法吗?

据我所知,是的。

编辑:另一种解决方案是转换为至少与要打印的类型一样宽的类型。例如,int宽度至少为2个字节,可以使用int16_t打印printf("%d\n", (int)some_var)

答案 1 :(得分:0)

是的,如果你正在使用新类型,你真的应该使用新的格式说明符。

这是最好的方法,因为实现已经完成了确保格式字符串对于类型正确的繁琐工作。

所以,例如:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main (void) {
    int32_t i32 = 40000;
    printf ("%d\n", i32);            // might work.
    printf ("%" PRId32 "\n", i32);   // will work.
    return 0;
}

显示两种方式。

然而,实际上没有保证第一个将按预期执行。例如,在具有16位int类型的系统上,您可能会获得不同的值。