解析和显示CBOR数据

演示如何分析CBOR格式的文件。

本示例显示如何直接使用QCborStreamReader类来解析CBOR内容。cbordump程序从文件或标准输入读取CBOR格式的数据,并以可读格式将解码的内容输出到stdout。它可以输出CBOR诊断表示法(与JSON类似),或者可以生成详细输出,其中每个字节的输入都显示其编码。

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()函数

此函数将传入的字节和解码内容放在同一行上。它使用lambda函数打印字节和解码内容,但结构上类似于dumpOne()。

CborTagDescription

描述可用的CBOR标签的tagDescriptions表自动从iana.org网站上可用的XML文件生成。当dumpOneDetailed()报告一个标签时,它使用此表中的描述。

example项目 @ code.qt.io

另请参阅QCborStreamReaderQt中的CBOR支持

© 2024 Qt公司有限公司。此处包含的文档贡献归其各自所有者所有。此处的文档根据Free Software Foundation发布的GNU自由文档许可协议版本1.3的条款许可。Qt及其相关标志是芬兰及其它全球地区的The Qt Company Ltd.的商标。所有其他商标均归各自所有者所有。