class QCborStreamReader#

QCborStreamReader 类是一个简单的CBOR流解码器,可以在 QByteArrayQIODevice 上运行。 更多

摘要#

方法#

注意

本文档可能包含从C++到Python自动翻译的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建一个工单来告知我们。

详细描述#

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

这个类可以用来直接从一个QByteArrayQIODevice 中解码CBOR内容流。CBOR ( Concise Binary Object Representation) 是一种与JSON兼容的非常紧凑的二进制数据编码形式。它是由IETF约束性RESTful环境(CoRE)工作组创建的,该工作组已经在多个新的RFC中使用它,意在与CoAP协议一起使用。

QCborStreamReader 提供了一个类似于QXmlStreamReader 的StAX-like API。使用它需要一定的CBOR编码知识。对于一个更简单的API,请参见QCborValue 以及解码函数 fromCbor()

通常,通过将源 QByteArrayQIODevice 作为构造函数的参数来创建一个 QCborStreamReader,如果没有解码错误,则从流中弹出元素。有三种类型的CBOR类型:

种类

类型

行为

固定宽度

整数、标签、简单类型、浮点数

值的解析由 QCborStreamReader 完成解析,因此访问器函数是 const。必须调用 next() 以前进。

字符串

字节数组、文本字符串

长度(如果已知)预先解析,但字符串本身不会被解析。访问器函数不是 const,可能会分配内存。一旦调用,访问器函数自动前进到下一个元素。

容器

数组、映射

长度(如果已知)预先解析。要访问元素,必须调用 enterContainer(),读取所有元素,然后调用 leaveContainer()。这个函数将前进到下一个元素。

因此,处理器函数通常如下所示:

def handleStream(reader):

    switch (reader.type())
    elif currentMode == QCborStreamReader.UnsignedInteger:
    elif currentMode == QCborStreamReader.NegativeInteger:
    elif currentMode == QCborStreamReader.SimpleType:
    elif currentMode == QCborStreamReader.Float16:
    elif currentMode == QCborStreamReader.Float:
    elif currentMode == QCborStreamReader.Double:
        handleFixedWidth(reader)
        reader.next()
        break
    elif currentMode == QCborStreamReader.ByteArray:
    elif currentMode == QCborStreamReader.String:
        handleString(reader)
        break
    elif currentMode == QCborStreamReader.Array:
    elif currentMode == QCborStreamReader.Map:
        reader.enterContainer()
        while reader.lastError() == QCborError.NoError:
            handleStream(reader)
        if reader.lastError() == QCborError.NoError:
            reader.leaveContainer()

CBOR支持#

以下表格列出了 QCborStreamReader 所支持的CBOR功能。

功能

支持

无符号数字

是(完整范围)

有符号数字

是(完整范围)

字节字符串

文本字符串

分块字符串

标签

是(任意)

布尔值

空值

未定义

任意简单值

半精度浮点数(16位)

单精度浮点数(32位)

双精度浮点数(64位)

无穷大和 NaN 浮点数

确定长度的数组和映射

不定长度的数组和映射

除字符串和整数之外的映射键类型

是(任意)

处理无效或不完整的 CBOR 流

QCborStreamReader 能够自动检测输入的损坏。所使用的库已经针对所有类型的无效输入进行了广泛测试,并能够报告错误。如果检测到任何错误,QCborStreamReader 将会将 lastError() 设置为 NoError 之外的其他值,以指示检测到的情况。

QCborStreamReader 在常规项解析过程中检测到的大多数错误都无法恢复。使用 QCborStreamReader 的代码可以选择处理正确解码的数据,或者选择丢弃整个数据。

唯一可以恢复的错误是 EndOfFile ,这表示需要更多的数据来完成任务解析。当数据来自异步源,如管道( QProcess )或套接字(QTcpSocket, QUdpSocket, QNetworkReply 等)时,这种情况非常有用。当数据到来时,周围代码需要调用 addData()(如果从 QByteArray 读取),或者调用 reparse()(如果是直接从现在有更多数据的 QIDODevice 读取)。

参见

QCborStreamWriter QCborValue QXmlStreamReader 解析和显示CBOR数据 序列化转换器 保存和加载游戏

class Type#

该枚举包含了所有可能的CBOR类型,由QCborStreamReader 解码得到。CBOR有7种主要类型,以及一些无值的简单类型和浮点值。

常量

描述

QCborStreamReader.UnsignedInteger

(主要类型0)范围从0到264 - 1(18,446,744,073,709,551,616)

QCborStreamReader.NegativeInteger

(主要类型1)范围从-1到-264(-18,446,744,073,709,551,616)

QCborStreamReader.ByteArray

(主要类型2)任意二进制数据。

QCborStreamReader.ByteString

ByteArray的别名。

QCborStreamReader.String

(主要类型3)包含NUL的可能为Unicode文本。

QCborStreamReader.TextString

String的别名。

QCborStreamReader.Array

(主要类型4)异构项目数组。

QCborStreamReader.Map

(主要类型5)异构项目映射/字典。

QCborStreamReader.Tag

(主要类型6)为通用CBOR项目提供进一步语义值的数字。有关更多信息,请参阅QCborTag

QCborStreamReader.SimpleType

(主要类型7)不携带进一步值的类型。包括布尔值(真和假)、null、undefined。

QCborStreamReader.Float16

IEEE 754半精度浮点数(qfloat16)。

QCborStreamReader.HalfFloat

Float16的别名。

QCborStreamReader.Float

IEEE 754单精度浮点数(float)。

QCborStreamReader.Double

IEEE 754双精度浮点数(double)。

QCborStreamReader.Invalid

不是有效的类型,要么是由于解析错误,要么是由于到达数组或映射的末尾。

class StringResultCode#

此枚举由QCborStreamReaderreadStringreadByteArray 返回,并用于指示解析的状态。

常量

描述

QCborStreamReader.EndOfString

字符串解析完成,没有错误。

QCborStreamReader.Ok

函数返回数据;没有错误。

QCborStreamReader.Error

解析失败,出现错误。

__init__(device)#
参数:

设备QIODevice

这是一个重载函数。

创建一个QCborStreamReader对象,该对象将读取device中找到的CBOR流来解析。QCborStreamReader不会获取device的所有权,因此它必须保持有效,直到对象被销毁。

__init__()

创建一个不含源数据的QCborStreamReader对象。构建之后,QCborStreamReader将报告解析错误。

您可以通过调用addData()或在设置不同的源设备时使用setDevice()来添加更多数据。

__init__(data, len)
参数:
  • dataquint8

  • len – int

这是一个重载函数。

创建一个QCborStreamReader对象,它从data起始处解析长度为len字节的数据。指针必须保持有效,直到QCborStreamReader被销毁。

__init__(data)
参数:

dataQByteArray

这是一个重载函数。

创建一个QCborStreamReader对象,它会解析在data中找到的CBOR流。

__init__(data, len)
参数:
  • data – str

  • len – int

这是一个重载函数。

创建一个QCborStreamReader对象,它从data起始处解析长度为len字节的数据。指针必须保持有效,直到QCborStreamReader被销毁。

addData(data)#
参数:

dataQByteArray

data添加到CBOR流中,并重新解析当前元素。此函数在处理流时数据结束,但现在有更多数据可用时很有用。

addData(data, len)
参数:
  • data – str

  • len – int

这是一个重载函数。

向CBOR流中添加从data开始的len字节的数据,并重新解析当前元素。如果处理流时之前已到达数据末尾,但现在已经有了更多的数据,此函数很有用。

addData(data, len)
参数:
  • dataquint8

  • len – int

这是一个重载函数。

向CBOR流中添加从data开始的len字节的数据,并重新解析当前元素。如果处理流时之前已到达数据末尾,但现在已经有了更多的数据,此函数很有用。

clear()#

清除解码器状态,并将输入源数据重置为空字节数组。在调用此函数后,QCborStreamReader将指示解析错误。

调用addData()以添加更多待解析的数据。

containerDepth()#
返回类型::

int

返回此流进入容器数的数量,但没有用leaveContainer()退出。

currentOffset()#
返回类型::

int

返回当前正在解码的项在输入流中的偏移量。如果源数据是QByteArray或它是一个在解码开始时将位置设置为起始位置的QIODevice,则当前偏移量是迄今为止解码的字节数。

currentStringChunkSize()#
返回类型::

int

返回当前文本或字节字符串块的尺寸。如果CBOR流包含非分块字符串(即,如果isLengthKnown()返回true),则此函数返回整个字符串的尺寸,与length()相同。

此函数用于预分配缓冲区,该缓冲区的指针可以稍后传递给readStringChunk()

参见

readString() readByteArray() readStringChunk()

device()
返回类型::

QIODevice

返回被setDevice()或构造函数QCborStreamReader设置的QIODevice。如果此对象正在从QByteArray读取,则此函数返回nullptr。

参见

setDevice()

enterContainer()
返回类型::

bool

进入当前项目所是的数组或映射中,并为迭代容器中包含的元素做准备。如果进入容器成功,则返回true,否则返回false(通常是解析错误)。对enterContainer()的每次调用都必须与对leaveContainer()的调用配对。

只有当当前项是数组或映射(即如果isArray()isMap()isContainer()为true)时,才能调用此函数。在其他任何条件下调用它是错误的。

hasNext()#
返回类型::

bool

如果当前容器中还有更多待解码的条目,则返回 true;如果已到达其末尾,则返回 false。如果正在解析根元素,hasNext() 返回 false 指示解析完成;否则,如果容器深度非零,则外部代码需要调用 leaveContainer()

isArray()#
返回类型::

bool

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

如果当前元素的类型是数组(即 type() 返回 Array ),则返回 true。如果此函数返回 true,则可以调用 enterContainer() 以开始解析该容器。

如果当前元素是数组,也可以调用 isLengthKnown() 以确定数组的大小是否在 CBOR 流中明确指定。如果是,可以通过调用 length() 获取该大小。

以下示例根据数组的大小预分配了一个 QVariantList,以便更有效地进行解码

def populateFromCbor(reader):

    list = QVariantList()
    if reader.isLengthKnown():
        list.reserve(reader.length())
    reader.enterContainer()
    while reader.lastError() == QCborError.NoError and reader.hasNext():
        list.append(readOneElement(reader))
    if reader.lastError() == QCborError.NoError:
        reader.leaveContainer()

注意

上述代码没有验证长度是否是一个合理的值。如果输入流报告长度为 10 亿个元素,则上述函数将尝试分配大约 16 GB 或更多的 RAM,这可能导致崩溃。

isBool()#
返回类型::

bool

如果当前元素是布尔值(即truefalse),返回true;否则返回false。如果此函数返回true,您可以调用toBool()来检索布尔值的值。您还可以调用toSimpleType()并将其与QCborSimpleValue::True或QCborSimpleValue::False进行比较。

isByteArray()#
返回类型::

bool

如果当前元素的类型是字节数组(即如果type()返回ByteArray),则返回true。如果此函数返回true,您可以调用readByteArray()来读取该数据。

参见

方法type()readByteArray()isString()

isContainer()#
返回类型::

bool

如果当前元素是容器(即数组或映射),则返回 true,否则返回 false。如果当前元素是容器,可以使用 isLengthKnown() 函数来确定容器的大小是否在流中明确指定。如果是,则可以使用 length() 来获取该大小。

更重要的是,对于容器,可以使用 enterContainer() 函数开始遍历其中包含的元素。

isDouble()#
返回类型::

bool

如果当前元素的类型是 IEEE 754 双精度浮点数(即如果 type() 返回 Double ),则返回 true。如果此函数返回 true,则可以调用 toDouble() 来读取该数据。

isFalse()#
返回类型::

bool

如果当前元素是 false 值,则返回 true,否则返回 false。

isFloat()#
返回类型::

bool

如果当前元素类型为 IEEE 754 单精度浮点数(即如果 type() 返回 Float),则返回 true。如果此函数返回 true,则可以调用 toFloat() 读取数据。

isFloat16()#
返回类型::

bool

如果当前元素类型为 IEEE 754 半精度浮点数(即如果 type() 返回 Float16),则返回 true。如果此函数返回 true,则可以调用 toFloat16() 读取数据。

参见

type() toFloat16() isFloat() isDouble()

isInteger()#
返回类型::

bool

如果当前元素的类型是无符号整数或负整数(即 type() 返回 UnsignedIntegerNegativeInteger ),则返回 true。如果此函数返回 true,则可以调用 toInteger() 来读取该值。

参见

type() toInteger() toUnsignedInteger() toNegativeInteger() isUnsignedInteger() isNegativeInteger()

isInvalid()
返回类型::

bool

如果当前元素无效,则返回 true;否则返回 false。如果发生解码错误或已解析数组或映射中的最后一个元素时,当前元素可能是无效的。

注意

此函数与 isNull() 不同。Null 是一个正常的 CBOR 类型,应用程序必须处理它。

参见

type() isValid()

isLengthKnown()
返回类型::

bool

如果当前数组、映射、字节数组或字符串的长度已知(在 CBOR 流中为显式),则返回 true;否则返回 false。此函数应仅在元素为其中之一的情况下调用。

如果长度已知,可以通过调用 length() 来获取。

如果映射或数组的长度未知,则由流中存在的元素数量隐式指定。在那种情况下,QCborStreamReader 没有提供计算长度的 API。

字符串和字节数组也可能具有不确定的长度(即它们可能以多个块的形式传输)。当前不能使用 QCborStreamWriter 创建这些,但可以使用其他编码器创建,因此 QCborStreamReader 支持它们。

isMap()#
返回类型::

bool

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

当当前元素的类型是映射(即如果 type() 返回 Map ) 时,将返回 true。如果该函数返回 true,您可以调用 enterContainer() 以开始解析该容器。

当当前元素是映射时,您还可以调用 isLengthKnown() 来确定映射的大小是否在 CBOR 流中明确指定。如果是的话,可以通过调用 length() 来获得该大小。

以下示例在给出映射大小时预分配了一个 QVariantMap,以实现更高效的解码

def populateFromCbor(reader):

    map = QVariantMap()
    if reader.isLengthKnown():
        map.reserve(reader.length())
    reader.enterContainer()
    while reader.lastError() == QCborError.NoError and reader.hasNext():
        key = readElementAsString(reader)
        map.insert(key, readOneElement(reader))

    if reader.lastError() == QCborError.NoError:
        reader.leaveContainer()

上面的示例使用了一个名为 readElementAsString 的函数来读取映射的键并获取一个字符串。这是因为 CBOR 映射可以包含任何类型的键,而不仅仅是字符串。用户代码需要执行此转换、拒绝非字符串键或使用不同的容器,而不是 QVariantMapQVariantHash 。例如,如果映射预期将包含整型键,这被推荐作为因为这样做可以减少流大小和解析,正确的容器将是 \l{QMap}<int, QVariant>\l{QHash}<int, QVariant>

注意

上面的代码没有验证长度是否是一个合理的值。如果输入流报告长度为 10 亿个元素,上述函数将尝试分配大约 24 GB 或更多的 RAM,这可能会导致崩溃。

isNegativeInteger()#
返回类型::

bool

如果当前元素的类型为负整数(即 type() 返回 NegativeInteger),则返回 true。如果此函数返回 true,您可以调用 toNegativeInteger()toInteger() 来读取该值。

参见

type() toNegativeInteger() toInteger() isInteger() isUnsignedInteger()

isNull()#
返回类型::

bool

如果当前元素为 null 值,则返回 true;否则返回 false。Null 值可用作表示一些可选数据缺失的指示。

注意

此函数不是 isValid() 的对立。Null 值是一个有效的 CBOR 值。

isSimpleType()#
返回类型::

bool

如果当前元素的类型为任何 CBOR 简单类型,包括布尔值(true 和 false)以及 null 和 undefined,则返回 true。要找出这是哪种简单类型,请调用 toSimpleType()。或者,如果想要测试特定的简单类型,可以调用带有 QCborSimpleType 参数的重载。

CBOR 简单类型是没有额外值的类型。共有 255 种可能性,但目前只有四种具有定义的含义。代码不期望处理未知简单类型,如果找到未知类型,可能会简单地将其视为无效流丢弃。

参见

QCborSimpleType type() isSimpleType(QCborSimpleType) toSimpleType()

isSimpleType(st)
参数:

stQCborSimpleType

返回类型::

bool

如果当前元素的类型是简单类型 st,则返回 true,否则返回 false。如果此函数返回 true,则 toSimpleType() 将返回 st

CBOR 简单类型是没有额外值的类型。共有 255 种可能性,但目前只有四种具有定义的含义。代码不期望处理未知简单类型,如果找到未知类型,可能会简单地将其视为无效流丢弃。

isString()
返回类型::

bool

如果当前元素的类型是文本字符串(即,如果 type() 返回 String ),则返回 true。如果此函数返回 true,则可以调用 readString() 读取该数据。

isTag()
返回类型::

bool

如果当前元素类型是CBOR标签(即type()返回Tag),则返回true。如果该函数返回true,您可以调用toTag()读取该数据。

参见

type() toTag()

isTrue()
返回类型::

bool

如果当前元素是true值,则返回true,否则返回false。

参见

type() isFalse() isBool() toBool() isSimpleType() toSimpleType()

isUndefined()
返回类型::

bool

如果当前元素是undefined值,则返回true,否则返回false。未定义值可以编码以表示某些转换失败或在创建流时无法进行转换。QCborStreamReader永远不会进行任何替换,并且此函数仅在流包含显式的未定义值时返回true。

isUnsignedInteger()
返回类型::

bool

如果当前元素类型是无符号整数(即type()返回UnsignedInteger),则返回true。如果该函数返回true,您可以通过调用toUnsignedInteger()toInteger()来读取该值。

isValid()#
返回类型::

bool

如果当前元素有效则返回 true,否则返回 false。如果出现解码错误或者我们已经解析了数组或映射中的最后一个元素,则当前元素可能无效。

注意

此函数不是 isNull() 的对立面。Null 是一个正常的 CBOR 类型,应用程序必须处理该类型。

lastError()#
返回类型::

QCborError

返回解码流时遇到的最后一个错误(如有)。如果没有遇到错误,则返回 NoError

参见

isValid()

leaveContainer()#
返回类型::

bool

离开正在处理的数组或映射,并将解码器定位到容器末尾之后的下一个项目。如果离开容器成功则返回 true,否则返回 false(通常是解析错误)。每次调用 enterContainer() 必须与对 leaveContainer() 的调用配对。

此函数只能在 hasNext() 返回 false 且 containerDepth() 不为零的情况下调用。在其他任何条件下调用它都是错误。

length()#
返回类型::

int

返回字符串或字节数组的长度,或数组的元素数量,如果是已知的,则返回映射中项对的数量。如果长度未知(即,如果isLengthKnown() 返回了 false),不得超过此函数。这样做是错误的,并且这会导致QCborStreamReader 停止解析输入流。

next([maxRecursion=10000])#
参数:

maxRecursion - int

返回类型::

bool

向前推进CBOR流解码一个元素。通常应在解析固定宽度的基本元素时调用此函数(即整数、简单值、标签和浮点值)。但如果当前项是字符串、数组或映射,也可以调用此函数,并且它会跳过整个元素,包括所有包含的元素。

如果推进成功,此函数返回 true,否则返回 false。如果流损坏、不完整或数组和映射的嵌套级别超过 maxRecursion,则可能失败。当 hasNext() 返回 false 时调用此函数也是错误。如果此函数返回 false,则 lastError() 将返回错误代码,详细说明失败的原因。

parentContainerType()#
返回类型::

类型

返回 ArrayMap ,指示包含当前项的容器是数组还是映射。如果我们目前正在解析根元素,此函数返回 Invalid .

readByteArray()#
返回类型::

QCborStringResultByteArray

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

从CBOR字符串中解码一个字节数组块并返回它。此函数适用于常规和分块内容,因此调用者必须始终循环调用此函数,即使 isLengthKnown() 为 true。此函数典型用法如下

def decodeBytearray(reader):

    result = QBytearray()
    r = reader.readBytearray()
    while r.status == QCborStreamReader.Ok:
        result += r.data
        r = reader.readByteArray()

    if r.status == QCborStreamReader.Error:
        # handle error condition
        result.clear()

    return result

函数 toByteArray() 实现上述循环和一些额外的检查。

此函数不执行任何类型转换,包括从整数或字符串转换。因此,只能在其为 true 时调用它;在其他条件下调用它是错误的行为。

参见

toByteArray() readString() isByteArray() readStringChunk()

readString()#
返回类型::

QCborStringResultString

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

从CBOR字符串中解码一个字符串块并返回它。此函数适用于常规和分块字符串内容,因此调用者必须始终循环调用此函数,即使 isLengthKnown() 为 true。此函数典型用法如下

def decodeString(reader):

    result = QString()
    r = reader.readString()
    while r.status == QCborStreamReader.Ok:
        result += r.data
        r = reader.readString()

    if r.status == QCborStreamReader.Error:
        # handle error condition
        result.clear()

    return result

函数 toString() 实现上述循环和一些额外的检查。

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

参见

toString() readByteArray() isString() readStringChunk()

readUtf8String()#
返回类型::

QCborStringResultByteArray

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

解码来自CBOR字符串的字符串片段并返回它。这个函数用于常规和分块字符串内容,因此即使isLengthKnown()是true,调用者也必须始终循环调用此函数。此函数的典型用法类似于以下示例中的readString()

def decodeString(reader):

    result = QString()
    r = reader.readString()
    while r.status == QCborStreamReader.Ok:
        result += r.data
        r = reader.readString()

    if r.status == QCborStreamReader.Error:
        # handle error condition
        result.clear()

    return result

toUtf8String()函数实现了上述循环和一些其他检查。

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

参见

toString() readByteArray() isString() readStringChunk()

reparse()#

重新解析当前元素。当源QIODevice中有更多数据可用,并且由于输入数据在CBOR流结束之前到达输入数据结束而解析失败时,必须调用此函数。

当从QByteArray()读取时,addData()函数将自动调用此函数。如果在读取未失败的情况下调用它,则不会有任何操作。

reset()#

将源重置到开头并清除解码器状态。如果源数据是QByteArrayQCborStreamReader将从数组开头重新开始。

如果源数据是QIODevice,此函数将调用reset(),这将定位到字节位置0。如果CBOR流在不位于设备开头的地方(例如文件的开头)找到,则此函数可能做错事情。相反,将QIODevice定位到正确的偏移量,并调用setDevice()

setDevice(device)#
参数:

设备QIODevice

设置数据源为device,将解码器重置为其初始状态。

参见

device()

toBool()#
返回类型::

bool

返回当前元素的布尔值。

此函数不执行任何类型转换,包括从整数的转换。因此,只有在 isTrue()isFalse()isBool() 返回 true 时才能调用;在其他任何条件下调用它都是一个错误。

toByteArray()#
返回类型::

QByteArray

解码当前字节字符串并返回它。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果在执行中发现错误,此函数将返回一个默认构造的 QByteArray(),但这可能与某些空字节字符串无法区分。因此,请检查 lastError() 以确定是否发生了错误。

此函数不执行任何类型转换,包括从整数或字符串转换。因此,只能在其为 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readByteArray() readStringChunk() isByteArray() toString()

toByteArray(dst)
参数:

dstQByteArray

返回类型::

bool

这是一个重载函数。

解码当前字节字符串并将其追加到 dst。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果在解码过程中发生错误,可能仍将成功解码的块写入到 dst。如果没有错误发生,则返回 true,否则返回 false

此函数不执行任何类型转换,包括从整数或字符串转换。因此,只能在其为 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readByteArray() readStringChunk() isByteArray() toString()

toDouble()#
返回类型::

浮点数

返回当前元素的双精度浮点值。

此函数不执行任何类型转换,包括从其他浮点类型或从整数值转换。因此,只有在 isDouble() 为 true 时才能调用它;在其他条件下调用它将是一个错误。

参见

isDouble() toFloat16() toFloat()

toFloat()#
返回类型::

浮点数

返回当前元素的32位单精度浮点值。

此函数不执行任何类型转换,包括从其他浮点类型或从整数值转换。因此,只有在 isFloat() 为 true 时才能调用它;在其他条件下调用它将是一个错误。

参见

isFloat() toFloat16() toDouble()

toInteger()#
返回类型::

int

返回当前元素的整数值,无论是负数、正数还是零。如果该值大于 2^63 - 1 或小于 -2^63,则返回的值将溢出并将具有错误的符号。需要处理这些值时,请使用 toUnsignedInteger()toNegativeInteger()

此函数不执行任何类型转换,包括从布尔值或CBOR标签转换。因此,只有在 isInteger() 为 true 时才能调用它;在其他条件下调用它将是一个错误。

参见

isInteger() toUnsignedInteger() toNegativeInteger()

toSimpleType()#
返回类型::

QCborSimpleType

返回当前简单类型的值。

此函数不执行任何类型转换,包括从整数转换。因此,只有在isSimpleType() 返回 true 时才能调用它;在其他任何条件下调用它都是错误的。

toString()#
返回类型::

str

解码当前的文本字符串并返回它。如果字符串是分段的,该函数将遍历所有分块并将它们连接起来。如果发生错误,此函数将返回一个默认构造的 QString(),但这可能无法与某些空文本字符串区分开来。相反,检查lastError() 确定是否发生了错误。

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readString() readStringChunk() isString() toByteArray()

toString(dst)
参数:

dst – str

返回类型::

bool

这是一个重载函数。

解码当前的文本字符串并将其附加到 dst。如果字符串是分段的,此函数将遍历所有分块并将它们连接起来。如果解码过程中发生错误,仍然可能将其他成功解码的分块写入到 dst。如果没有错误地发生解码,则返回 true,否则返回 false

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readString() readStringChunk() isString() toByteArray()

toTag()#
返回类型::

QCborTag

返回当前元素的标签值。

该函数不执行任何类型转换,包括从整数。因此,只有在isTag()为true的情况下才能调用它;在其他任何条件下调用都是错误。

标签是与通用CBOR类型相关联的64位数字,为它们提供了更深的含义。有关已知的标签列表,请参见QCborKnownTags枚举。

toUnsignedInteger()#
返回类型::

int

返回当前元素的无符号整数值。

该函数不执行任何类型转换,包括从布尔值或CBOR标签转换。因此,只有在isUnsignedInteger()为true的情况下才能调用它;在其他任何条件下调用都是错误。

此函数可用于获取超出toInteger()返回类型范围的数字。

toUtf8String()#
返回类型::

QByteArray

解码当前的文本字符串并返回它。如果字符串是分段的,该函数将遍历所有分块并将它们连接起来。如果发生错误,此函数将返回一个默认构造的 QString(),但这可能无法与某些空文本字符串区分开来。相反,检查lastError() 确定是否发生了错误。

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readString() readStringChunk() isString() toByteArray()

toUtf8String(dst)
参数:

dstQByteArray

返回类型::

bool

这是一个重载函数。

解码当前的文本字符串并将其附加到 dst。如果字符串是分段的,此函数将遍历所有分块并将它们连接起来。如果解码过程中发生错误,仍然可能将其他成功解码的分块写入到 dst。如果没有错误地发生解码,则返回 true,否则返回 false

此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只能在其返回 true 时调用它;在其他条件下调用它是错误的行为。

注意

此函数不能恢复。也就是说,不应该在可能继续接收 CBOR 数据的上下文中使用此函数,例如从套接字或管道。它应该在已完全接收到数据并在输入 QByteArrayQIODevice 中可用时使用。

参见

readString() readStringChunk() isString() toByteArray()

type()#
返回类型::

类型

返回当前元素的类型。它可以是有效的类型之一,或者无效。