Mar*_*ngs 14 c++ qstring qt pointers
出于调试目的,我经常将指针值(大多数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');
Run Code Online (Sandbox Code Playgroud)
但编译器似乎并没有弄清楚如何处理该值.char
在这种情况下铸造是否正确?或者更安全的方法是什么?
使用Visual C++和Qt 4.7.4.
编辑
qulonglong
按建议使用
qulonglong p = (qulonglong)this;
return QString("0x%1").arg(p, 8, '0');
Run Code Online (Sandbox Code Playgroud)
产生编译器错误消息(错误C2666).
Ign*_*tor 17
另一种方案:
MyClass *ptr = new MyClass();
QString ptrStr = QString("0x%1").arg((quintptr)ptr,
QT_POINTER_SIZE * 2, 16, QChar('0'));
Run Code Online (Sandbox Code Playgroud)
它将使用指针(quintptr
和QT_POINTER_SIZE
)的正确大小和类型,并始终使用前缀"0x"
编辑:
要使用零作为前缀,第四个参数必须是'QChar('0')'.要输出正确的位数,QChar('0')
需要加倍(因为每个字节需要2个十六进制数字).
Kam*_*mek 13
为什么不简单地使用 QString & QString::sprintf ( const char * cformat, ... )
QString t;
// QString::sprintf adds 0x prefix
t.sprintf("%08p", ptr);
Run Code Online (Sandbox Code Playgroud)
QTextStream似乎提供了您所寻求的功能,并且只需在void*
.
const void * address = static_cast<const void*>(ptr);
QString addressString;
QTextStream addressStream (&addressString);
addressStream << address;
qDebug() << addressString;
Run Code Online (Sandbox Code Playgroud)
与其他方法不同,它不引用特定数字“8”或强制转换为“qlonglong”等概念。似乎不那么令人担忧,并且很像std::string 的规定方法(尽管不涉及std::string
转换)
归档时间: |
|
查看次数: |
19647 次 |
最近记录: |