Как преобразовать значение указателя в QString?
Вопрос
в целях отладки я часто выводю значения указателя (в основном, this
) в qDebug:
qDebug("pointer of current object = 0x%08x",this);
, используя "% 08x" в качестве строки формата и просто передавая this
в качестве параметра.
Как преобразовать значение указателя в QString?
Вот что у меня получилось:
родовое словоНо компилятор, похоже, не понимает, что делать с этим значением.Правильно ли в этом случае приведение к генерации кода кода?Или что было бы более безопасным способом сделать это?
Использование Visual C ++ с Qt 4.7.4.
< sizesEDIT
Использование общего кода кода, как предлагается
родовое слововыдает сообщение об ошибке компилятора (errorC2666) .
Решение
Использование qstring :: arg () / P >.
MyClass *ptr = new MyClass();
QString ptrStr = QString("0x%1").arg((quintptr)ptr,
QT_POINTER_SIZE * 2, 16, QChar('0'));
.
Это будет использовать правильный тип и размер для указателей (quintptr
и QT_POINTER_SIZE
) и всегда будет префиксировать "0x"
.
<Сильные> Примечания:
Для префикса значения с нулями четвертый параметр должен быть генеракодицетагкодом.
Для вывода правильного количества цифр QChar('0')
необходимо удвоить (потому что каждый байт нуждается в 2 шестнадцатеричных цифрах).
Другие советы
Почему не просто использовать QString & QString::sprintf ( const char * cformat, ... )
QString t;
// QString::sprintf adds 0x prefix
t.sprintf("%08p", ptr);
. QTextStream , похоже, предлагает функции, которые вы ищете, и работаетпросто на общем коде кода.
родовое словоВ отличие от других подходов, он не ссылается на такие понятия, как конкретное число «8» или приведение к «qlonglong».Кажется менее тревожным и очень похож на предписанный метод для std :: string (хотя и без использования общих преобразований кода кода)
Вы можете сделать промежуточный шаг с помощью sprintf
:
Или через ostringstream
:
Для меня в основном достаточно увидеть, является ли указатель генеральным кодом кода или имеет ли он то же значение, что и другой указатель.В таких случаях достаточно преобразовать указатель в число, а затем использовать nullptr