出于调试目的,我经常将指针值(大多数为this
)输出到qDebug:qDebug("pointer of current object = 0x%08x",this);
,使用“%08x”作为格式字符串,并简单地传递this
作为参数。
如何将指针值转换为QString?
这是我目前得到的结果:
char p = (char)this;
return QString("0x%1").arg(p, 8, '0');
但是编译器似乎不知道该如何处理这个值。在这种情况下,强制转换为char
是否正确?或者什么是更安全的方法?
使用Visual C++和Qt 4.7.4.
编辑
按照建议使用qulonglong
qulonglong p = (qulonglong)this;
return QString("0x%1").arg(p, 8, '0');
产生编译器错误消息(error C2666)。
5条答案
按热度按时间doinxwow1#
使用QString::arg():
它将对指针(
quintptr
和QT_POINTER_SIZE
)使用正确的类型和大小,并始终使用前缀"0x"
。备注:
若要在值前面加上零,第四个参数必须是
QChar('0')
。要输出正确的位数,
QT_POINTER_SIZE
需要加倍(因为每个字节需要2个十六进制位)。vxqlmq5t2#
为什么不直接使用
QString & QString::sprintf ( const char * cformat, ... )
bfnvny8b3#
QTextStream似乎提供了您所寻求的功能,并且可以在
void*
上简单地运行。与其他方法不同的是,它没有引用特定数字“8”或强制转换为“qlonglong”之类的概念,看起来不那么令人担心,而且很像prescribed method for std::string(尽管没有涉及
std::string
转换)wnvonmuf4#
您可以使用
sprintf
执行中间步骤:或者通过
ostringstream
:oknwwptz5#
对我来说,主要是看指针是
nullptr
还是与其他指针具有相同的值就足够了。