Отображение шестнадцатеричного значения Qdebug
Я пытаюсь отобразить число, используя QDebug в формате Hex. Ниже приведен код, который я написал. Он работает, но вывод имеет строковое содержимое, заключенное в двойные кавычки:
Как удалить эти кавычки?
m_CanMsg_ptr->id = 0x720;
m_CanMsg_ptr->sizeData = 1;
m_CanMsg_ptr->data[0] = 0x05;
MessageID.setNum(m_CanMsg_ptr->id,16);
DataSize = QString("%1").arg(m_CanMsg_ptr->sizeData, 0, 16);
data = QString("%1").arg(m_CanMsg_ptr->data[0], 0, 16)
qDebug() << "Heart-Beat : Msg ID = " << MessageID << " Msg DLC = " << DataSize;
qDebug() << "Msg Data " << " = " << data;
Я сделал это в соответствии с этими ресурсами:
http://forum.qt.io/topic/5003/moved-how-to-display-a-local-variable-in-hex-when-debugging-a-qt-app/2
http://qt.shoutwiki.com/wiki/Convert_hexadecimal_to_decimal_and_vice-versa_in_Qt
![enter image description here]()
Ответы
Ответ 1
qDebug
- это интерфейс отладки. Это не предназначено для вывода в произвольном порядке, это просто способ быстрого получения данных в читаемой форме. Это предназначено для разработчика, и кавычки там, чтобы напомнить вам, что вы выводите строку. qDebug()
предполагает, что данные const char*
являются сообщением и показывают его без кавычек, другие строковые типы, такие как QString
, являются "просто данными" и показаны с кавычками.
Если вы хотите настроить форматирование, не используйте qDebug()
, используйте QTextStream
:
#include <QTextStream>
#include <cstdio>
QTextStream out(stdout);
void f() {
out << "Heart-Beat : Msg ID = " << MessageID << " Msg DLC = " << DataSize << endl;
}
Ответ 2
Вы можете сначала форматировать строку:
int myValue = 0x1234;
QString valueInHex= QString("%1").arg(myValue , 0, 16);
qDebug() << "value = " << valueInHex;
Ответ 3
qDebug() < QByteArray:: номер (MyNumber).toHex()
Ответ 4
Другой способ сделать это:
int value = 0xFFFF;
qDebug() << QString::number(value, 16);
Надеюсь, что это поможет.
Изменить:
Чтобы удалить кавычки, вы можете указать число как указатель, так как qt будет форматировать это без использования кавычек. Например:
int value = 0xFFFF;
qDebug() << (void *) value;
Слегка взломать, но он работает.
Ответ 5
Если кто-то не связан с использованием операторов потоковой передачи, может пойти с простым старым %x
и использовать qDebug со строкой форматирования:
int hexnum = 0x56;
qDebug("My hex number is: %x", hexnum);
который даст "My hex number: 56", без кавычек.
Ответ 6
Может быть, немного поздно, но в случае, если кому-то это нужно:
Как statet в ответе Kuber Ober, Qt удаляет только кавычки, если он const char *
передан qDebug
. Однако Qt обеспечивает макрос, чтобы сделать то же самое с макросом QString
- The qPrintable
:
qDebug() << qPrintable(QString("String without quotes")) << QString("String with quotes");
Таким образом, вы можете использовать функцию QString::number
(как предоставлено TheDancinZerg) для форматирования строки:
int value = 0xFFFF;
qDebug() << qPrintable(QString::number(value, 16));
Ответ 7
Используйте noquote()
. Как в:
qDebug().noquote() << QString::number(value, 16)
Ответ 8
Решение прост:
#include <QDebug>
int value = 0x12345;
qDebug() << "Value : " << hex << value;