20

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

これらの引用符を削除するには?

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

12

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

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

お役に立てれば。

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

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

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

于 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);

これにより、引用符なしで「My hex number is: 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 に答える
0

ただのメモ!を使用する方法<<hexは現在廃止されているため、次の使用をお勧めします。


#include <QDebug>

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

このようにコンパイルする<<hexと、いくつかの警告が表示されます。これは、すぐにこの形式の書き込みに互換性がなくなることを意味します。詳細については、 Qt のドキュメントをご覧ください。

于 2022-02-11T19:37:10.687 に答える