printf ptr:可以消除前导0x吗?

时间:2011-05-18 06:12:51

标签: linux printf

Linux printf将%p参数呈现为带有前导0x的十六进制数字。有没有办法让它不打印0x? (需要在32位和64位上工作。)

3 个答案:

答案 0 :(得分:6)

您可以使用uintptr_t中的<inttypes.h>格式说明符:

#include <inttypes.h>
[...]
printf("%"PRIxPTR"\n", (uintptr_t) p);

对于%x类型,它的作用类似于uintptr_t,这是一种整数类型,能够从/向任何指针类型进行往返转换。

答案 1 :(得分:0)

使用%llx,它肯定会在64位上运行。试过并测试过。

答案 2 :(得分:0)

使用%lx%08lx。它适用于32位和64位linux gcc,因为long int的宽度始终与void *相同。不适用于MSVC,因为long int在MSVC中始终为32位。

如果您希望它适用于所有编译器,您可以使用%llx并将指针转换为unsigned long long int,但它在32位时效率不高。

如果您也想要效率,请为不同的情况定义不同的宏。