このページでは

CBORデータの解析と表示

CBOR形式のファイルを解析する方法のデモです。

この例では、QCborStreamReader クラスを直接使用してCBORコンテンツを解析する方法を示します。cbordump プログラムは、ファイルまたは標準入力からCBOR形式のコンテンツを読み取り、デコードしたコンテンツを人間が読みやすい形式で標準出力(stdout)に出力します。CBOR診断表記(JSONに類似)で出力することも、入力された各バイトとそのエンコーディングを並べて表示する詳細な出力を生成することも可能です。

診断表記および詳細な16進数バイト形式でCBORデータを表示するターミナル出力

CborDumper クラス

CborDumperクラスには、CborDumperコンストラクタに渡されたQFile オブジェクトを使用して初期化されたQCborStreamReader オブジェクトが含まれています。引数に基づいて、dump関数はdumpOne()またはdumpOneDetailed()のいずれかを呼び出し、内容を標準出力にダンプします。

struct CborDumper
{
    enum DumpOption { ShowCompact = 0x01, ShowWidthIndicators = 0x02, ShowAnnotated = 0x04 };
    Q_DECLARE_FLAGS(DumpOptions, DumpOption)

    CborDumper(QFile *f, DumpOptions opts_);
    QCborError dump();

private:
    void dumpOne(int nestingLevel);
    void dumpOneDetailed(int nestingLevel);

    void printByteArray(const QByteArray &ba);
    void printWidthIndicator(quint64 value, char space = '\0');
    void printStringWidthIndicator(quint64 value);

    QCborStreamReader reader;
    QByteArray data;
    QStack<quint8> byteArrayEncoding;
    qint64 offset = 0;
    DumpOptions opts;
};
dumpOne()関数

QCborStreamReader::type()を有効にすると、ストリーム内の現在の値の型に応じた適切な出力が行われます。型が配列またはマップの場合、値の内容が反復処理され、各エントリに対して、インデント引数を増やしてdumpOne()関数が再帰的に呼び出されます。 型がタグの場合は、そのタグが出力され、インデント引数を増やさないまま dumpOne() が一度呼び出されます。

dumpOneDetailed() 関数

この関数は、入力されたバイトとデコードされた内容の両方を同じ行に出力します。バイトとデコードされた内容を出力するためにラムダ関数を使用しますが、それ以外は dumpOne() と同様の構造を持っています。

CborTagDescription

利用可能な CBOR タグを記述した「tagDescriptions 」テーブルは、iana.org のウェブサイトから入手可能な XML ファイルから自動的に生成されます。dumpOneDetailed() がタグを報告する際は、このテーブルにあるそのタグの説明を使用します。

code.qt.io のサンプルプロジェクト

QCborStreamReader およびQt XML における CBOR サポートも参照してください 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.