J'essaie d'afficher un nombre à l'aide de QDebug au format Hex. Voici le code que j'ai écrit. Cela fonctionne mais la sortie a un contenu de chaîne entre guillemets:
Comment supprimer ces citations?
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;
J'ai fait selon ces ressources:
http://forum.qt.io/topic/5003/moved-how-to-display-a-local-variable-in-hex-when-debugging-a-qt-app/2http://qt.shoutwiki.com/wiki/Convert_hexadecimal_to_decimal_and_vice-versa_in_Qt
qDebug
est une interface de débogage. Il n'est pas destiné à une sortie au format personnalisé, c'est simplement un moyen d'obtenir rapidement des données sous une forme lisible. Il est destiné à un développeur et les guillemets sont là pour vous rappeler que vous avez sorti une chaîne. qDebug()
suppose que les données const char*
sont un message et l'affiche sans guillemets, les autres types de chaînes comme QString
sont "juste des données" et sont affichés avec des guillemets.
Si vous souhaitez un formatage personnalisé, n'utilisez pas qDebug()
, utilisez QTextStream
:
#include <QTextStream>
#include <cstdio>
QTextStream out(stdout);
void f() {
out << "Heart-Beat : Msg ID = " << MessageID << " Msg DLC = " << DataSize << endl;
}
Vous pouvez d'abord formater la chaîne:
int myValue = 0x1234;
QString valueInHex= QString("%1").arg(myValue , 0, 16);
qDebug() << "value = " << valueInHex;
La solution est simple:
#include <QDebug>
int value = 0x12345;
qDebug() << "Value : " << hex << value;
Une autre façon de procéder serait:
int value = 0xFFFF;
qDebug() << QString::number(value, 16);
J'espère que cela t'aides.
Modifier: pour supprimer les guillemets, vous pouvez convertir le nombre en pointeur, car qt le formatera sans utiliser de guillemets. Par exemple:
int value = 0xFFFF;
qDebug() << (void *) value;
Légèrement hackish, mais ça marche.
Si l'on n'est pas lié à l'utilisation des opérateurs de streaming, peut aller avec le vieux %x
et utilisez qDebug avec la chaîne de formatage:
int hexnum = 0x56;
qDebug("My hex number is: %x", hexnum);
qui donnera "Mon numéro hexadécimal est: 56", sans guillemets.
qDebug() << QByteArray::number(myNumber).toHex()
Utilisez noquote()
. Un péché:
qDebug().noquote() << QString::number(value, 16)
Peut être un peu tard, mais au cas où quelqu'un en aurait besoin:
En tant que statet dans la réponse de Kuber Ober, Qt ne supprime les guillemets que si c'est un const char *
passé à qDebug
. Cependant, Qt fournit une macro pour faire de même avec une macro QString
- La macro qPrintable
:
qDebug() << qPrintable(QString("String without quotes")) << QString("String with quotes");
De cette façon, vous pouvez utiliser le QString::number
fonction (fournie par TheDancinZerg) pour formater la chaîne:
int value = 0xFFFF;
qDebug() << qPrintable(QString::number(value, 16));
int value = 0xff005542;
qDebug() << QString("%1").arg(value , 0, 16).toUpper()
>>> FF005542