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

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

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

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

这就像%xuintptr_t类型,这是一个整数类型能够往返转换任何指针类型。

使用%llx,它肯定会在64位上工作。 尝试和测试。

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

如果你想让它在所有的编译器上工作,你可以使用%llx并将你的指针转换为unsigned long long int ,但是在32位中效率不高。

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