Linux printf将%p参数呈现为带有前导0x的hex数字。 有没有办法让它不打印0x? (需要在32位和64位上工作)
您可以从<inttypes.h>
使用uintptr_t
的格式说明符:
#include <inttypes.h> [...] printf("%"PRIxPTR"\n", (uintptr_t) p);
这就像%x
为uintptr_t
类型,这是一个整数类型能够往返转换任何指针类型。
使用%llx,它肯定会在64位上工作。 尝试和测试。
使用%lx
或%08lx
。 它适用于32位和64位linux gcc,因为long int
的宽度总是与void *
相同。 不适用于MSVC,因为long int
在MSVC中始终为32位。
如果你想让它在所有的编译器上工作,你可以使用%llx
并将你的指针转换为unsigned long long int
,但是在32位中效率不高。
如果你想要效率,为不同的情况定义不同的宏。