web-dev-qa-db-fra.com

Qdebug affiche la valeur hexadécimale

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

enter image description here

15
Katoch

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;
}
8
Kuba Ober

Vous pouvez d'abord formater la chaîne:

int myValue = 0x1234;
QString valueInHex= QString("%1").arg(myValue , 0, 16);
qDebug() << "value = " << valueInHex;
23
StephBel

La solution est simple:

#include <QDebug>

int value = 0x12345;
qDebug() << "Value : " << hex << value;
20
Mykhailo Bryzhak

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.

7
TheDancinZerg

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.

6
zgyarmati
qDebug() << QByteArray::number(myNumber).toHex()
4
Kirill Gamazkov

Utilisez noquote(). Un péché:

qDebug().noquote() << QString::number(value, 16)
2
pixelgrease

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));
2
Felix
int value = 0xff005542;
qDebug() << QString("%1").arg(value , 0, 16).toUpper()

>>> FF005542

0
fyngyrz