Как преобразовать значение указателя в QString?

StackOverflow https://stackoverflow.com/questions/8881923

  •  29-10-2019
  •  | 
  •  

Вопрос

в целях отладки я часто выводю значения указателя (в основном, 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

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top