17

デバッグの目的で、ポインター値 (ほとんどの場合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正しいですか?または、これを行うためのより安全な方法は何でしょうか?

Qt 4.7.4 での Visual C++ の使用。

編集

qulonglong提案どおりに使用する

qulonglong p = (qulonglong)this;
return QString("0x%1").arg(p, 8, '0');

コンパイラ エラー メッセージ(エラー C2666)で生成されます。

4

5 に答える 5

14

単に使用しない理由QString & QString::sprintf ( const char * cformat, ... )

QString t;
// QString::sprintf adds 0x prefix
t.sprintf("%08p", ptr);
于 2012-01-16T16:34:53.067 に答える
7

QTextStreamは、求める機能を提供しているように見え、void*.

const void * address = static_cast<const void*>(ptr);
QString addressString;
QTextStream addressStream (&addressString);
addressStream << address;
qDebug() << addressString;

他のアプローチとは異なり、特定の数字「8」や「qlonglong」へのキャストなどの概念を参照しません。心配することは少なく、std::string の所定のメソッドによく似ています (ただし、std::string変換は必要ありません) 。

于 2012-08-03T03:49:58.170 に答える
2

次の方法で中間ステップを実行できますsprintf

QString pointer_to_qstring(void *ptr)
{
    char temp[16];
    sprintf(temp, "0x%08p", ptr);
    return QString(static_cast<char *>(temp));
}

または経由ostringstream

QString pointer_to_qstring(void *ptr)
{
    std::ostringstream oss;
    oss << std::setw(8) << std::setfill('0') << std::hex << ptr:
    return QString(oss.str().c_str());
}
于 2012-01-16T15:44:30.460 に答える