20

我正在尝试使用 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

在此处输入图像描述

4

10 回答 10

33

解决方案很简单:

#include <QDebug>

int value = 0x12345;
qDebug() << "Value : " << hex << value;
于 2017-11-22T13:39:48.493 回答
26

您可以先格式化字符串:

int myValue = 0x1234;
QString valueInHex= QString("%1").arg(myValue , 0, 16);
qDebug() << "value = " << valueInHex;
于 2014-08-13T09:19:43.750 回答
12

另一种方法是:

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

希望这可以帮助。

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

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

有点hackish,但它有效。

于 2016-01-28T17:38:25.977 回答
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;
}
于 2013-10-14T11:23:40.333 回答
6

如果不使用流式操作符,可以使用普通的旧的%x并使用带有格式化字符串的 qDebug:

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

这将产生“我的十六进制数是:56”,不带引号。

于 2016-07-06T00:00:37.213 回答
4
qDebug() << QByteArray::number(myNumber).toHex()
于 2015-10-17T20:58:55.473 回答
2

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

正如 Kuber Ober 的回答中所说,Qt 仅在const char *传递给qDebug. 然而,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));
于 2016-02-08T09:45:57.260 回答
2

用于noquote()避免引号。如:

qDebug().noquote() << QString::number(value, 16);
于 2016-09-06T21:00:54.030 回答
1
int value = 0xff005542;
qDebug() << QString("%1").arg(value , 0, 16).toUpper();

>>> FF005542

这将为您提供所需长度的十六进制输出。但是,如果您想要固定宽度的输出,这很方便(四个十六进制数字的示例):

int value = 0xff;
qDebug() << QString("%1").arg(value, 4, 16, (QChar)'0').toUpper();
//      Here's the fixed field length⬆︎

>>> 00FF

于 2018-06-23T14:19:08.667 回答
0

只是一个注释!使用的方法<<hex现在已经被淘汰了,所以推荐使用:


#include <QDebug>

int num = 0x4321;
qDebug() << "Hex num: " <<Qt::hex << num;

因为,如果你只是用这种方式编译,<<hex你会得到一些警告,这意味着很快这种形式的编写将不再兼容。有关更多信息,请查看 Qt 文档

于 2022-02-11T19:37:10.687 回答