Qdebug显示十六进制值

Kat*_*och 15 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;
Run Code Online (Sandbox Code Playgroud)

我根据这些资源做了:

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 /维基/ Convert_hexadecimal_to_decimal_and_vice-versa_in_Qt

在此输入图像描述

小智 24

你可以先格式化字符串:

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


小智 20

解决方案很简单:

#include <QDebug>

int value = 0x12345;
qDebug() << "Value : " << hex << value;
Run Code Online (Sandbox Code Playgroud)

  • 从 Qt 5.14 开始,“hex”通过 Qt 命名空间“Qt::hex”公开,您可以在带或不带“Qt::”前缀的情况下使用它。从 Qt 5.15 开始,“hex”已被弃用,“Qt::hex”是首选用法。 (4认同)
  • 要显示“0x”前缀,请使用“Qt::hex &lt;&lt; Qt::showbase &lt;&lt; your_value” (2认同)

Rei*_*ica 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;
}
Run Code Online (Sandbox Code Playgroud)


The*_*erg 7

另一种方法是:

int value = 0xFFFF;
qDebug() << QString::number(value, 16);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

编辑:要删除引号,您可以将数字转换为指针,因为qt将格式化,而不使用引号.例如:

int value = 0xFFFF;
qDebug() << (void *) value;  
Run Code Online (Sandbox Code Playgroud)

稍微hackish,但它的工作原理.

  • 使用 noquote(),如: qDebug().noquote() &lt;&lt; QString::number(value, 16); (2认同)

zgy*_*ati 6

如果不希望使用流运算符,则可以使用普通的旧%x格式,并使用qDebug和格式化字符串:

int hexnum = 0x56;
qDebug("My hex number is: %x", hexnum);
Run Code Online (Sandbox Code Playgroud)

会产生“我的十六进制数字为:56”(不带引号)。