Qdebug显示十六进制值

时间:2013-10-14 11:17:22

标签: qt qdebug

我正在尝试使用十六进制格式的QDebug显示一个数字。下面是我写的代码。它正在工作,但输出的字符串内容用双引号括起来:

如何删除这些引号?

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

9 个答案:

答案 0 :(得分:23)

您可以先格式化字符串:

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

答案 1 :(得分:14)

解决方案很简单:

#include <QDebug>

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

答案 2 :(得分:8)

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;
}

答案 3 :(得分:6)

另一种方法是:

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

希望这有帮助。

编辑: 要删除引号,可以将数字转换为指针,因为qt将使用引号对其进行格式化。例如:

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

略微hackish,但它确实有效。

答案 4 :(得分:4)

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

答案 5 :(得分:4)

如果一个人没有使用流媒体操作符,可以使用普通的%x并使用qDebug格式化字符串:

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

将产生&#34;我的十六进制数是:56&#34;,没有引号。

答案 6 :(得分:2)

可能有点迟,但如果有人需要这个:

作为Kuber Ober在回答中的状态,如果const char *传递给qDebug,Qt只会删除引号。但是,Qt提供了一个宏来对QString - qPrintable宏执行相同操作:

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

这样,您可以使用QString::number函数(由TheDancinZerg提供)来格式化字符串:

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

答案 7 :(得分:2)

使用noquote()。如:

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

答案 8 :(得分:0)

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

>>> FF005542