CBORデータの解析と表示

CBORフォーマットのファイルを解析する方法のデモンストレーション。

この例では、QCborStreamReader クラスを直接使用して CBOR コンテンツを解析する方法を示します。cbordump プログラムはファイルまたは標準入力からCBORフォーマットのコンテンツを読み込み、デコードされたコンテンツを人間が読めるフォーマットで標準出力にダンプします。CBOR診断記法(JSONに似ている)で出力することもできますし、入力された各バイトがエンコードされた状態で表示されるような冗長な出力をすることもできます。

CborDumperクラス

CborDumperクラスにはQCborStreamReader オブジェクトが含まれており、CborDumperコンストラクタに渡されるQFile オブジェクト引数を使用して初期化されます。引数に基づいて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

Qt のQCborStreamReaderCBOR サポートも参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。