web-dev-qa-db-ja.com

Qdebugは16進値を表示します

QDebugを使用して16進形式で数値を表示しようとしています。以下は私が書いたコードです。動作していますが、出力には文字列の内容が二重引用符で囲まれています。

これらの引用を削除する方法?

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/2http://qt.shoutwiki.com/wiki/Convert_hexadecimal_to_decimal_and_vice-versa_in_Qt

enter image description here

15
Katoch

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

最初に文字列をフォーマットできます:

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

解決策は簡単です:

#include <QDebug>

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

これを行う別の方法は次のとおりです。

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

お役に立てれば。

編集:引用符を削除するには、qtが引用符を使用せずにフォーマットするため、数値をポインターとしてキャストできます。例えば:

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

少しハックですが、動作します。

7
TheDancinZerg

ストリーミングオペレーターの使用に縛られていない場合は、単純な古い%xおよびフォーマット文字列を指定してqDebugを使用します。

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

引用符なしで「私の16進数は56」になります。

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

noquote()を使用します。のように:

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

少し遅れるかもしれませんが、誰かがこれを必要とする場合のために:

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

>>> FF005542

0
fyngyrz