Qdebug display hex value

南笙酒味 提交于 2019-12-10 12:30:44

问题


I am trying to display a number using QDebug in the Hex format. Below is the code which I have written. It is working but the output has string contents enclosed in double quotes:

How to remove these quotes?

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;

I did as per these resources:

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


回答1:


qDebug is a debug interface. It's not meant for custom-formatted output, it's simply a way of quickly getting data in readable form. It's meant for a developer, and the quotes are there to remind you that you've output a string. qDebug() presumes that the const char* data is a message and shows it without quotes, other string types like QString are "just data" and are shown with quotes.

If you want custom formatting, don't use qDebug(), use QTextStream:

#include <QTextStream>
#include <cstdio>

QTextStream out(stdout);

void f() {
   out << "Heart-Beat : Msg ID = " << MessageID << "  Msg DLC = " << DataSize << endl;
}



回答2:


You could format string first:

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



回答3:


The solution is simple:

#include <QDebug>

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



回答4:


Another way of doing this would be:

int value = 0xFFFF;
qDebug() << QString::number(value, 16);

Hope this helps.

Edit: To remove the quotes you can cast the number as a pointer, as qt will format that without using quotes. For instance:

int value = 0xFFFF;
qDebug() << (void *) value;  

Slightly hackish, but it works.




回答5:


If one is not tied to use streaming operators, can go with the plain old %x and use qDebug with formatting string:

int hexnum = 0x56;
qDebug("My hex number is: %x", hexnum);

which will yield "My hex number is: 56", without quotes.




回答6:


qDebug() << QByteArray::number(myNumber).toHex()



回答7:


May be a little late, but in case someone needs this:

As statet in the answere by Kuber Ober, Qt only removes the quotes if it's a const char * passed to qDebug. However, Qt provides a macro to do the same with a QString - The qPrintable macro:

qDebug() << qPrintable(QString("String without quotes")) << QString("String with quotes");

This way, you can use the QString::number function (as provided by TheDancinZerg) to format the string:

int value = 0xFFFF;
qDebug() << qPrintable(QString::number(value, 16));



回答8:


Use noquote(). As in:

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



回答9:


int value = 0xff005542;
qDebug() << QString("%1").arg(value , 0, 16).toUpper()

>>> FF005542



来源:https://stackoverflow.com/questions/19358967/qdebug-display-hex-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!