Sur cette page

Analyse et affichage des données CBOR

Démonstration de l'analyse de fichiers au format CBOR.

Cet exemple montre comment utiliser directement la classe ` QCborStreamReader ` pour analyser du contenu CBOR. Le programme ` cbordump ` lit le contenu au format CBOR à partir de fichiers ou de l’entrée standard, puis affiche le contenu décodé sur la sortie standard (`stdout`) dans un format lisible par l’utilisateur. Il peut générer une sortie au format de notation de diagnostic CBOR (similaire à JSON), ou produire une sortie détaillée où chaque octet d’entrée est affiché avec son encodage à côté.

Sortie du terminal affichant les données CBOR sous forme de notation de diagnostic et au format octet hexadécimal détaillé

La classe CborDumper

La classe CborDumper contient un objet ` QCborStreamReader ` initialisé à l’aide de l’argument de type ` QFile ` transmis au constructeur de CborDumper. En fonction des arguments, la fonction `dump` appelle soit `dumpOne()`, soit `dumpOneDetailed()` pour afficher le contenu sur la sortie standard,

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;
};
La fonction `dumpOne()`

L’activation de ` QCborStreamReader::type()` permet d’afficher le contenu de manière adaptée au type de la valeur actuelle dans le flux. Si le type est un tableau ou une carte, le contenu de la valeur est parcouru, et pour chaque entrée, la fonction `dumpOne()` est appelée de manière récursive avec un argument d’indentation plus élevé. Si le type est une balise, celle-ci est affichée et la fonction dumpOne() est appelée une seule fois sans augmenter l’argument d’indentation.

La fonction `dumpOneDetailed()`

Cette fonction affiche à la fois les octets entrants et le contenu décodé sur la même ligne. Elle utilise des fonctions lambda pour afficher les octets et le contenu décodé, mais présente par ailleurs une structure similaire à celle de `dumpOne()`.

CborTagDescription

Le tableau « tagDescriptions », décrivant les balises CBOR disponibles, est généré automatiquement à partir d’un fichier XML disponible sur le site web iana.org. Lorsque dumpOneDetailed() signale une balise, il utilise sa description issue de ce tableau.

Exemple de projet sur code.qt.io

Voir également QCborStreamReader et Prise en charge de CBOR dans Qt.

© 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.