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
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;
}
_
最初に文字列をフォーマットできます:
int myValue = 0x1234;
QString valueInHex= QString("%1").arg(myValue , 0, 16);
qDebug() << "value = " << valueInHex;
解決策は簡単です:
#include <QDebug>
int value = 0x12345;
qDebug() << "Value : " << hex << value;
これを行う別の方法は次のとおりです。
int value = 0xFFFF;
qDebug() << QString::number(value, 16);
お役に立てれば。
編集:引用符を削除するには、qtが引用符を使用せずにフォーマットするため、数値をポインターとしてキャストできます。例えば:
int value = 0xFFFF;
qDebug() << (void *) value;
少しハックですが、動作します。
ストリーミングオペレーターの使用に縛られていない場合は、単純な古い%x
およびフォーマット文字列を指定してqDebugを使用します。
int hexnum = 0x56;
qDebug("My hex number is: %x", hexnum);
引用符なしで「私の16進数は56」になります。
qDebug() << QByteArray::number(myNumber).toHex()
noquote()
を使用します。のように:
qDebug().noquote() << QString::number(value, 16)
少し遅れるかもしれませんが、誰かがこれを必要とする場合のために:
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));
int value = 0xff005542;
qDebug() << QString("%1").arg(value , 0, 16).toUpper()
>>> FF005542