Auf dieser Seite

QCborStreamReader Class

Die Klasse „QCborStreamReader“ ist ein einfacher CBOR-Stream-Decoder, der entweder mit einem „ QByteArray “ oder einem „ QIODevice “ arbeitet. Mehr...

Header: #include <QCborStreamReader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Typen

struct StringResult
enum StringResultCode { EndOfString, Ok, Error }
enum Type { UnsignedInteger, NegativeInteger, ByteArray, ByteString, String, …, Invalid }

Öffentliche Funktionen

QCborStreamReader()
QCborStreamReader(QIODevice *device)
QCborStreamReader(const QByteArray &data)
QCborStreamReader(const char *data, qsizetype len)
QCborStreamReader(const quint8 *data, qsizetype len)
QCborStreamReader(const QCborStreamReader &)
~QCborStreamReader()
void addData(const QByteArray &data)
void addData(const char *data, qsizetype len)
void addData(const quint8 *data, qsizetype len)
void clear()
int containerDepth() const
qint64 currentOffset() const
qsizetype currentStringChunkSize() const
QIODevice *device() const
bool enterContainer()
bool hasNext() const
bool isArray() const
bool isBool() const
bool isByteArray() const
bool isContainer() const
bool isDouble() const
bool isFalse() const
bool isFloat16() const
bool isFloat() const
bool isInteger() const
bool isInvalid() const
bool isLengthKnown() const
bool isMap() const
bool isNegativeInteger() const
bool isNull() const
bool isSimpleType() const
bool isSimpleType(QCborSimpleType st) const
bool isString() const
bool isTag() const
bool isTrue() const
bool isUndefined() const
bool isUnsignedInteger() const
bool isValid() const
QCborError lastError() const
bool leaveContainer()
quint64 length() const
bool next(int maxRecursion = 10000)
QCborStreamReader::Type parentContainerType() const
(since 6.7) QByteArray readAllByteArray()
(since 6.7) QString readAllString()
(since 6.7) QByteArray readAllUtf8String()
(since 6.7) bool readAndAppendToByteArray(QByteArray &dst)
(since 6.7) bool readAndAppendToString(QString &dst)
(since 6.7) bool readAndAppendToUtf8String(QByteArray &dst)
QCborStreamReader::StringResult<QByteArray> readByteArray()
QCborStreamReader::StringResult<QString> readString()
QCborStreamReader::StringResult<qsizetype> readStringChunk(char *ptr, qsizetype maxlen)
(since 6.7) QCborStreamReader::StringResult<QByteArray> readUtf8String()
void reparse()
void reset()
void setDevice(QIODevice *device)
bool toBool() const
double toDouble() const
qfloat16 toFloat16() const
float toFloat() const
qint64 toInteger() const
QCborNegativeInteger toNegativeInteger() const
QCborSimpleType toSimpleType() const
QCborTag toTag() const
quint64 toUnsignedInteger() const
QCborStreamReader::Type type() const
QCborStreamReader &operator=(const QCborStreamReader &)

Ausführliche Beschreibung

Diese Klasse kann verwendet werden, um einen Stream mit CBOR-Inhalten direkt aus einem „ QByteArray “ oder einem „ QIODevice “ zu dekodieren. CBOR steht für „Concise Binary Object Representation“ und ist eine sehr kompakte Form der binären Datenkodierung, die mit JSON kompatibel ist. Sie wurde von der IETF-Arbeitsgruppe „Constrained RESTful Environments“ (CoRE) entwickelt, die sie in vielen neuen RFCs verwendet hat. Sie ist für den Einsatz in Verbindung mit dem CoAP-Protokoll vorgesehen.

QCborStreamReader bietet eine StAX-ähnliche API, ähnlich der von QXmlStreamReader. Die Verwendung erfordert ein gewisses Maß an Wissen über die CBOR-Kodierung. Eine einfachere API finden Sie unter QCborValue, insbesondere die Dekodierungsfunktion QCborValue::fromCbor().

In der Regel erstellt man einen QCborStreamReader, indem man die Quelle QByteArray oder QIODevice als Parameter an den Konstruktor übergibt und anschließend Elemente aus dem Stream entnimmt, sofern bei der Dekodierung keine Fehler aufgetreten sind. Es gibt drei Arten von CBOR-Typen:

ArtTypenVerhalten
Feste BreiteGanzzahlen, Tags, einfache Typen, GleitkommazahlenDer Wert wird von QCborStreamReader vorab geparst, daher lauten die Zugriffsfunktionen „ const “. Zum Weiterlesen muss „ next()“ aufgerufen werden.
ZeichenkettenByte-Arrays, TextzeichenfolgenDie Länge (sofern bekannt) wird vorab geparst, die Zeichenkette selbst jedoch nicht. Die Zugriffsfunktionen sind nicht `const` und können Speicher zuweisen. Nach dem Aufruf springen die Zugriffsfunktionen automatisch zum nächsten Element.
ContainerArrays, MapsDie Länge (sofern bekannt) wird vorab analysiert. Um auf die Elemente zuzugreifen, müssen Sie „ enterContainer()“ aufrufen, alle Elemente lesen und anschließend „ leaveContainer()“ aufrufen. Diese Funktion springt zum nächsten Element.

Eine Prozessorfunktion sieht daher typischerweise so aus:

void handleStream(QCborStreamReader &reader)
{
    switch (reader.type())
    {
    case QCborStreamReader::UnsignedInteger:
    case QCborStreamReader::NegativeInteger:
    case QCborStreamReader::SimpleType:
    case QCborStreamReader::Float16:
    case QCborStreamReader::Float:
    case QCborStreamReader::Double:
        handleFixedWidth(reader);
        reader.next();
        break;
    case QCborStreamReader::ByteArray:
    case QCborStreamReader::String:
        handleString(reader);
        break;
    case QCborStreamReader::Array:
    case QCborStreamReader::Map:
        reader.enterContainer();
        while (reader.lastError() == QCborError::NoError)
            handleStream(reader);
        if (reader.lastError() == QCborError::NoError)
            reader.leaveContainer();
    }

}

CBOR-Unterstützung

Die folgende Tabelle listet die CBOR-Funktionen auf, die QCborStreamReader unterstützt.

FunktionUnterstützung
Vorzeichenlose ZahlenJa (gesamter Bereich)
Negative ZahlenJa (gesamter Bereich)
Byte-ZeichenfolgenJa
TextzeichenfolgenJa
Chunked-ZeichenfolgenJa
TagsJa (beliebig)
Boolesche WerteJa
NullJa
UndefiniertJa
Beliebige einfache WerteJa
Fließkommazahlen mit halber Genauigkeit (16 Bit)Ja
Gleitkommazahlen mit einfacher Genauigkeit (32 Bit)Ja
Gleitkommazahlen mit doppelter Genauigkeit (64 Bit)Ja
Unendlichkeitswerte und NaN-FließkommazahlenJa
Arrays und Maps mit festgelegter LängeJa
Arrays und Maps mit unbestimmter LängeJa
Map-Schlüsseltypen außer Zeichenketten und GanzzahlenJa (beliebig)

Umgang mit ungültigen oder unvollständigen CBOR-Streams

QCborStreamReader ist in der Lage, beschädigte Eingaben selbstständig zu erkennen. Die von ihm verwendete Bibliothek wurde ausgiebig auf ungültige Eingaben jeglicher Art getestet und ist durchaus in der Lage, Fehler zu melden. Wird ein Fehler erkannt, setzt QCborStreamReader ` lastError()` auf einen anderen Wert als ` QCborError::NoError`, um anzugeben, welche Situation erkannt wurde.

Die meisten Fehler, die von QCborStreamReader während der normalen Elementanalyse erkannt werden, sind nicht behebbar. Der Code, der QCborStreamReader verwendet, kann wahlweise die korrekt dekodierten Daten verarbeiten oder die gesamten Daten verwerfen.

Der einzige behebbare Fehler ist „ QCborError::EndOfFile “, der darauf hinweist, dass weitere Daten erforderlich sind, um das Parsen abzuschließen. Diese Situation ist nützlich, wenn Daten aus einer asynchronen Quelle gelesen werden, wie beispielsweise einer Pipe (QProcess) oder einem Socket (QTcpSocket, QUdpSocket, QNetworkReply usw.). Wenn weitere Daten eintreffen, muss der umgebende Code entweder ` addData()` aufrufen, falls die Analyse über ein ` QByteArray` erfolgt, oder ` reparse()`, falls stattdessen direkt von einem `QIDOevice` gelesen wird, das nun über weitere Daten verfügt (siehe setDevice()).

Siehe auch QCborStreamWriter, QCborValue, QXmlStreamReader, „Parsen und Anzeigen von CBOR-Daten“, „Serialisierungs-Konverter“ sowie „Speichern und Laden eines Spiels“.

Dokumentation zu Mitgliedstypen

enum QCborStreamReader::StringResultCode

Diese Enumeration wird von den Funktionen „ readString()“ und „ readByteArray()“ zurückgegeben und dient dazu, den Status der Analyse anzuzeigen.

KonstanteWertBeschreibung
QCborStreamReader::EndOfString0Die Analyse der Zeichenkette ist fehlerfrei abgeschlossen.
QCborStreamReader::Ok1Die Funktion hat Daten zurückgegeben; es ist kein Fehler aufgetreten.
QCborStreamReader::Error-1Die Analyse ist mit einem Fehler fehlgeschlagen.

enum QCborStreamReader::Type

Diese Aufzählung enthält alle möglichen CBOR-Typen, wie sie von QCborStreamReader dekodiert werden. CBOR umfasst 7 Haupttypen sowie eine Reihe einfacher Typen ohne Wert und Gleitkommawerte.

KonstanteWertBeschreibung
QCborStreamReader::UnsignedInteger0x00(Haupttyp 0) Reicht von 0 bis264 – 1 (18.446.744.073.709.551.616)
QCborStreamReader::NegativeInteger0x20(Haupttyp 1) Bereich von -1 bis-264 (-18.446.744.073.709.551.616)
QCborStreamReader::ByteArrayByteString(Haupttyp 2) Beliebige Binärdaten.
QCborStreamReader::ByteString0x40Ein Alias für ByteArray.
QCborStreamReader::StringTextString(Haupttyp 3) Unicode-Text, der möglicherweise NUL-Zeichen enthält.
QCborStreamReader::TextString0x60Ein Alias für „String“
QCborStreamReader::Array0x80(Haupttyp 4) Array aus heterogenen Elementen.
QCborStreamReader::Map0xa0(Haupttyp 5) Zuordnung/Wörterbuch heterogener Elemente.
QCborStreamReader::Tag0xc0(Haupttyp 6) Zahlen, die generischen CBOR-Elementen einen weiteren semantischen Wert verleihen. Weitere Informationen finden Sie unter QCborTag.
QCborStreamReader::SimpleType0xe0(Haupttyp 7) Typen ohne weiteren Wert. Umfasst Boolesche Werte (true und false), null und undefined.
QCborStreamReader::Float16HalfFloatIEEE 754-Gleitkommazahl mit halber Genauigkeit (qfloat16).
QCborStreamReader::HalfFloat0xf9Ein Alias für Float16.
QCborStreamReader::Float0xfaIEEE 754-Gleitkommazahlen mit einfacher Genauigkeit (float).
QCborStreamReader::Double0xfbIEEE 754-Gleitkommazahl mit doppelter Genauigkeit (double).
QCborStreamReader::Invalid0xffKein gültiger Typ, entweder aufgrund eines Parsing-Fehlers oder weil das Ende eines Arrays oder einer Map erreicht wurde.

Dokumentation der Mitgliedsfunktionen

QCborStreamReader::QCborStreamReader()

Erstellt ein QCborStreamReader-Objekt ohne Quelldaten. Nach der Erstellung meldet QCborStreamReader einen Fehler beim Parsen.

Sie können weitere Daten hinzufügen, indem Sie ` addData()` aufrufen oder mithilfe von ` setDevice()` ein anderes Quellgerät festlegen.

Siehe auch „ addData()“ und „ isValid()“.

[explicit] QCborStreamReader::QCborStreamReader(QIODevice *device)

Erstellt ein QCborStreamReader-Objekt, das den CBOR-Stream analysiert, der durch das Einlesen von „ device “ gefunden wurde. QCborStreamReader übernimmt nicht die Eigentumsrechte an „ device “, daher muss dieses Objekt gültig bleiben, bis dieses Objekt zerstört wird.

Dies ist eine überladene Funktion.

[explicit] QCborStreamReader::QCborStreamReader(const QByteArray &data)

Erstellt ein QCborStreamReader-Objekt, das den unter data befindlichen CBOR-Stream analysiert.

Dies ist eine überladene Funktion.

QCborStreamReader::QCborStreamReader(const char *data, qsizetype len)

Erstellt ein QCborStreamReader-Objekt mit len Bytes an Daten, beginnend bei data. Der Zeiger muss bis zur Zerstörung von QCborStreamReader gültig bleiben.

Dies ist eine überladene Funktion.

QCborStreamReader::QCborStreamReader(const quint8 *data, qsizetype len)

Erstellt ein QCborStreamReader-Objekt mit len Bytes an Daten, beginnend bei data. Der Zeiger muss bis zur Zerstörung von QCborStreamReader gültig bleiben.

Dies ist eine überladene Funktion.

[delete] QCborStreamReader::QCborStreamReader(const QCborStreamReader &)

Erstellt eine Instanz von ` QCborStreamReader` durch Kopieren. Diese Funktion wurde gelöscht.

[noexcept] QCborStreamReader::~QCborStreamReader()

Löscht dieses „ QCborStreamReader “-Objekt und gibt alle damit verbundenen Ressourcen frei.

void QCborStreamReader::addData(const QByteArray &data)

Fügt „ data “ zum CBOR-Stream hinzu und wertet das aktuelle Element neu aus. Diese Funktion ist nützlich, wenn während der Verarbeitung des Streams zuvor das Ende der Daten erreicht wurde, nun aber weitere Daten verfügbar sind.

void QCborStreamReader::addData(const char *data, qsizetype len)

Fügt dem CBOR-Stream len Bytes an Daten hinzu, beginnend bei data, und analysiert das aktuelle Element erneut. Diese Funktion ist nützlich, wenn während der Verarbeitung des Streams zuvor das Ende der Daten erreicht wurde, nun aber weitere Daten verfügbar sind.

Dies ist eine überladene Funktion.

void QCborStreamReader::addData(const quint8 *data, qsizetype len)

Fügt dem CBOR-Stream len Bytes an Daten, beginnend bei data, hinzu und analysiert das aktuelle Element erneut. Diese Funktion ist nützlich, wenn während der Verarbeitung des Streams zuvor das Ende der Daten erreicht wurde, nun aber weitere Daten verfügbar sind.

Dies ist eine überladene Funktion.

void QCborStreamReader::clear()

Löscht den Decoder-Status und setzt die Eingangsquelldaten auf ein leeres Byte-Array zurück. Nach dem Aufruf dieser Funktion zeigt ` QCborStreamReader ` einen Fehler beim Parsen an.

Rufen Sie ` addData()` auf, um weitere zu analysierende Daten hinzuzufügen.

Siehe auch ` reset()` und ` setDevice()`.

int QCborStreamReader::containerDepth() const

Gibt die Anzahl der Container zurück, die dieser Stream mit ` enterContainer()` betreten, aber noch nicht verlassen hat.

Siehe auch ` enterContainer()` und ` leaveContainer()`.

qint64 QCborStreamReader::currentOffset() const

Gibt den Offset im Eingabestrom des gerade dekodierten Elements zurück. Der aktuelle Offset entspricht nur dann der Anzahl der bisher dekodierten Bytes, wenn es sich bei den Quelldaten um einen „ QByteArray “ handelt oder um einen „ QIODevice “, der zu Beginn des Dekodiervorgangs an seinem Anfang positioniert war.

Siehe auch reset(), clear() und device().

qsizetype QCborStreamReader::currentStringChunkSize() const

Gibt die Größe des aktuellen Text- oder Byte-String-Chunks zurück. Wenn der CBOR-Stream einen nicht in Chunks unterteilten String enthält (d. h., wenn ` isLengthKnown()` den Wert ` true` zurückgibt), gibt diese Funktion die Größe des gesamten Strings zurück, genau wie ` length()`.

Diese Funktion ist nützlich, um den Puffer vorab zuzuweisen, dessen Zeiger später an ` readStringChunk()` übergeben werden kann.

Siehe auch readString(), readByteArray() und readStringChunk().

QIODevice *QCborStreamReader::device() const

Gibt den ` QIODevice ` zurück, der entweder mit ` setDevice()` oder dem Konstruktor ` QCborStreamReader ` festgelegt wurde. Wenn dieses Objekt aus einem ` QByteArray` gelesen hat, gibt diese Funktion stattdessen `nullptr` zurück.

Siehe auch ` setDevice()`.

bool QCborStreamReader::enterContainer()

Ruft das Array oder die Map ab, das bzw. die das aktuelle Element darstellt, und bereitet die Iteration über die im Container enthaltenen Elemente vor. Gibt „true“ zurück, wenn der Zugriff auf den Container erfolgreich war, andernfalls „false“ (in der Regel aufgrund eines Parsing-Fehlers). Jeder Aufruf von `enterContainer()` muss mit einem Aufruf von ` leaveContainer()` gepaart werden.

Diese Funktion darf nur aufgerufen werden, wenn das aktuelle Element ein Array oder ein Map ist (d. h., wenn isArray(), isMap() oder isContainer() „true“ ist). Ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch leaveContainer(), isContainer(), isArray() und isMap().

[noexcept] bool QCborStreamReader::hasNext() const

Gibt „true“ zurück, wenn im aktuellen Container noch weitere Elemente zu dekodieren sind, oder „false“, wenn das Ende des Containers erreicht wurde. Wenn das Stammelement geparst wird, bedeutet die Rückgabe von „false“ durch `hasNext()` , dass das Parsen abgeschlossen ist; andernfalls, wenn die Containertiefe ungleich Null ist, muss der übergeordnete Code ` leaveContainer()` aufrufen.

Siehe auch „ parentContainerType()“, „ containerDepth()“ und „ leaveContainer()“.

bool QCborStreamReader::isArray() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein Array ist (d. h., wenn ` type()` den Wert ` QCborStreamReader::Array` zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie ` enterContainer()` aufrufen, um mit der Analyse dieses Containers zu beginnen.

Wenn das aktuelle Element ein Array ist, können Sie auch ` isLengthKnown()` aufrufen, um herauszufinden, ob die Größe des Arrays im CBOR-Stream explizit angegeben ist. Ist dies der Fall, kann diese Größe durch Aufruf von ` length()` ermittelt werden.

Das folgende Beispiel reserviert unter Berücksichtigung der Array-Größe vorab ein ` QVariantList `, um die Dekodierung effizienter zu gestalten:

QVariantList populateFromCbor(QCborStreamReader &reader)
{
    QVariantList list;
    if (reader.isLengthKnown())
        list.reserve(reader.length());

    reader.enterContainer();
    while (reader.lastError() == QCborError::NoError && reader.hasNext())
        list.append(readOneElement(reader));
    if (reader.lastError() == QCborError::NoError)
        reader.leaveContainer();

    return list;
}

Hinweis: Der obige Code überprüft nicht, ob die Länge einen sinnvollen Wert hat. Wenn der Eingabestrom angibt, dass die Länge 1 Milliarde Elemente beträgt, versucht die obige Funktion, etwa 16 GB oder mehr RAM zuzuweisen, was zu einem Absturz führen kann.

Siehe auch type(), isMap(), isLengthKnown(), length(), enterContainer() und leaveContainer().

bool QCborStreamReader::isBool() const

Gibt „true“ zurück, wenn das aktuelle Element ein boolescher Wert ist (true oder false), andernfalls „false“. Wenn diese Funktion „true“ zurückgibt, können Sie toBool() aufrufen, um den Wert des booleschen Werts abzurufen. Sie können auch toSimpleType() aufrufen und den Wert entweder mit QCborSimpleValue::True oder QCborSimpleValue::False vergleichen.

Siehe auch type(), isFalse(), isTrue(), toBool(), isSimpleType() und toSimpleType().

bool QCborStreamReader::isByteArray() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein Byte-Array ist (d. h., wenn ` type()` ` QCborStreamReader::ByteArray` zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie ` readByteArray()` aufrufen, um diese Daten zu lesen.

Siehe auch type(), readByteArray() und isString().

bool QCborStreamReader::isContainer() const

Gibt „true“ zurück, wenn das aktuelle Element ein Container ist (d. h. ein Array oder ein Map), andernfalls „false“. Ist das aktuelle Element ein Container, kann mit der Funktion „ isLengthKnown()“ ermittelt werden, ob die Größe des Containers im Stream explizit angegeben ist; ist dies der Fall, kann mit „ length()“ diese Größe abgerufen werden.

Noch wichtiger ist, dass für einen Container die Funktion ` enterContainer()` zur Verfügung steht, um mit der Iteration durch die darin enthaltenen Elemente zu beginnen.

Siehe auch type(), isArray(), isMap(), isLengthKnown(), length(), enterContainer(), leaveContainer() und containerDepth().

bool QCborStreamReader::isDouble() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein IEEE-754-Gleitkommawert mit doppelter Genauigkeit ist (d. h., wenn type() den Wert „ QCborStreamReader::Double “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toDouble() aufrufen, um diese Daten auszulesen.

Siehe auch type(), toDouble(), isFloat16() und isFloat().

bool QCborStreamReader::isFalse() const

Gibt „true“ zurück, wenn das aktuelle Element den Wert „ false “ hat, andernfalls „false“.

Siehe auch „ type()“, „ isTrue()“, „ isBool()“, „ toBool()“, „ isSimpleType()“ und „ toSimpleType()“.

bool QCborStreamReader::isFloat16() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein IEEE-754-Gleitkommawert mit halber Genauigkeit ist (d. h., wenn type() den Wert „ QCborStreamReader::Float16 “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toFloat16() aufrufen, um diese Daten auszulesen.

Siehe auch type(), toFloat16(), isFloat() und isDouble().

bool QCborStreamReader::isFloat() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein IEEE-754-Gleitkommawert mit einfacher Genauigkeit ist (d. h., wenn type() den Wert „ QCborStreamReader::Float “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toFloat() aufrufen, um diese Daten auszulesen.

Siehe auch type(), toFloat(), isFloat16() und isDouble().

bool QCborStreamReader::isInteger() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements entweder eine vorzeichenlose Ganzzahl oder eine negative Ganzzahl ist (d. h., wenn type() den Wert „ QCborStreamReader::UnsignedInteger “ oder „ QCborStreamReader::NegativeInteger “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toInteger() aufrufen, um diesen Wert auszulesen.

Siehe auch type(), toInteger(), toUnsignedInteger(), toNegativeInteger(), isUnsignedInteger() und isNegativeInteger().

bool QCborStreamReader::isInvalid() const

Gibt „true“ zurück, wenn das aktuelle Element ungültig ist, andernfalls „false“. Das aktuelle Element kann ungültig sein, wenn ein Dekodierungsfehler aufgetreten ist oder wenn gerade das letzte Element eines Arrays oder einer Map geparst wurde.

Hinweis: Diese Funktion ist nicht zu verwechseln mit „ isNull()“. „Null“ ist ein normaler CBOR-Typ, der von der Anwendung verarbeitet werden muss.

Siehe auch „ type()“ und „ isValid()“.

[noexcept] bool QCborStreamReader::isLengthKnown() const

Gibt „true“ zurück, wenn die Länge des aktuellen Arrays, der Map, des Byte-Arrays oder der Zeichenkette bekannt ist (explizit im CBOR-Stream angegeben), andernfalls „false“. Diese Funktion sollte nur aufgerufen werden, wenn es sich bei dem Element um eines dieser Objekte handelt.

Ist die Länge bekannt, kann sie durch Aufruf von ` length()` abgerufen werden.

Ist die Länge einer Map oder eines Arrays nicht bekannt, ergibt sie sich implizit aus der Anzahl der im Stream vorhandenen Elemente. QCborStreamReader verfügt unter diesen Umständen über keine API zur Berechnung der Länge.

Zeichenketten und Byte-Arrays können ebenfalls eine unbestimmte Länge haben (das heißt, sie können in mehreren Blöcken übertragen werden). Diese können derzeit nicht mit ` QCborStreamWriter` erstellt werden, wären jedoch mit anderen Encodern möglich, weshalb ` QCborStreamReader ` sie unterstützt.

Siehe auch ` length()`, ` QCborStreamWriter::startArray()` und ` QCborStreamWriter::startMap()`.

bool QCborStreamReader::isMap() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements eine Map ist (d. h., wenn ` type()` den Wert ` QCborStreamReader::Map` zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie ` enterContainer()` aufrufen, um mit der Analyse dieses Containers zu beginnen.

Wenn das aktuelle Element eine Map ist, können Sie auch ` isLengthKnown()` aufrufen, um herauszufinden, ob die Größe der Map im CBOR-Stream explizit angegeben ist. Ist dies der Fall, kann diese Größe durch Aufruf von ` length()` ermittelt werden.

Das folgende Beispiel reserviert vorab ein ` QVariantMap ` unter Berücksichtigung der Größe der Map, um die Dekodierung effizienter zu gestalten:

QVariantMap populateFromCbor(QCborStreamReader &reader)
{
    QVariantMap map;
    if (reader.isLengthKnown())
        map = setMapLength(map, reader.length());

    reader.enterContainer();
    while (reader.lastError() == QCborError::NoError && reader.hasNext()) {
        QString key = readElementAsString(reader);
        map.insert(key, readOneElement(reader));
    }
    if (reader.lastError() == QCborError::NoError)
        reader.leaveContainer();

    return map;
}

Das obige Beispiel verwendet eine Funktion namens ` readElementAsString `, um die Schlüssel der Map zu lesen und eine Zeichenkette zu erhalten. Der Grund dafür ist, dass CBOR-Maps beliebige Typen als Schlüssel enthalten können, nicht nur Zeichenketten. Der Anwendercode muss entweder diese Konvertierung durchführen, Nicht-Zeichenfolgen-Schlüssel ablehnen oder stattdessen einen anderen Container als „ QVariantMap “ und „ QVariantHash “ verwenden. Wenn beispielsweise erwartet wird, dass die Map ganzzahlige Schlüssel enthält – was empfohlen wird, da dies die Streamgröße und den Parsingaufwand reduziert –, wäre der richtige Container „ \l{QMap}<int, QVariant> “ oder „ \l{QHash}<int, QVariant> “.

Hinweis: Der obige Code überprüft nicht, ob die Länge ein sinnvoller Wert ist. Wenn der Eingabestrom eine Länge von 1 Milliarde Elementen meldet, versucht die obige Funktion, etwa 24 GB oder mehr RAM zuzuweisen, was zu einem Absturz führen kann.

Siehe auch type(), isArray(), isLengthKnown(), length(), enterContainer() und leaveContainer().

bool QCborStreamReader::isNegativeInteger() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements eine negative Ganzzahl ist (d. h., wenn type() den Wert QCborStreamReader::NegativeInteger zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toNegativeInteger() oder toInteger() aufrufen, um diesen Wert auszulesen.

Siehe auch type(), toNegativeInteger(), toInteger(), isInteger() und isUnsignedInteger().

bool QCborStreamReader::isNull() const

Gibt „true“ zurück, wenn das aktuelle Element den Wert „ null “ hat, andernfalls „false“. Null-Werte können verwendet werden, um das Fehlen bestimmter optionaler Daten anzuzeigen.

Hinweis: Diese Funktion ist nicht das Gegenteil von „ isValid()“. Ein Null-Wert ist ein gültiger CBOR-Wert.

Siehe auch „ type()“, „ isSimpleType()“ und „ toSimpleType()“.

bool QCborStreamReader::isSimpleType() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein beliebiger einfacher CBOR-Typ ist, einschließlich eines booleschen Werts (true und false) sowie null und undefined. Um herauszufinden, um welchen einfachen Typ es sich handelt, rufen Sie „ toSimpleType()“ auf. Alternativ können Sie, um auf einen bestimmten einfachen Typ zu prüfen, die Überladung aufrufen, die einen „ QCborSimpleType “-Parameter akzeptiert.

CBOR-Einfachtypen sind Typen, die keinen zusätzlichen Wert enthalten. Es gibt 255 Möglichkeiten, jedoch haben derzeit nur vier Werte eine definierte Bedeutung. Es wird nicht erwartet, dass Code mit unbekannten Einfachtypen umgehen kann, und er darf den Stream einfach als ungültig verwerfen, wenn er einen unbekannten Typ findet.

Siehe auch QCborSimpleType, type(), isSimpleType(QCborSimpleType) und toSimpleType().

bool QCborStreamReader::isSimpleType(QCborSimpleType st) const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements der einfache Typ „ st “ ist, andernfalls „false“. Wenn diese Funktion „true“ zurückgibt, gibt „ toSimpleType()“ „ st “ zurück.

CBOR-Einfachtypen sind Typen, die keinen zusätzlichen Wert tragen. Es gibt 255 Möglichkeiten, jedoch haben derzeit nur vier Werte eine definierte Bedeutung. Es wird nicht erwartet, dass Code mit unbekannten Einfachtypen umgehen kann, und er darf den Stream einfach als ungültig verwerfen, wenn er einen unbekannten Typ findet.

Siehe auch QCborSimpleType, type(), isSimpleType() und toSimpleType().

bool QCborStreamReader::isString() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements eine Textzeichenfolge ist (d. h., wenn type() QCborStreamReader::String zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie readString() aufrufen, um diese Daten auszulesen.

Siehe auch ` type()`, ` readString()` und ` isByteArray()`.

bool QCborStreamReader::isTag() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements ein CBOR-Tag ist (d. h., wenn type() den Wert „ QCborStreamReader::Tag “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toTag() aufrufen, um diese Daten auszulesen.

Siehe auch type() und toTag().

bool QCborStreamReader::isTrue() const

Gibt „true“ zurück, wenn das aktuelle Element den Wert „ true “ hat, andernfalls „false“.

Siehe auch „ type()“, „ isFalse()“, „ isBool()“, „ toBool()“, „ isSimpleType()“ und „ toSimpleType()“.

bool QCborStreamReader::isUndefined() const

Gibt „true“ zurück, wenn das aktuelle Element den Wert „ undefined “ hat, andernfalls „false“. Undefinierte Werte können kodiert werden, um anzuzeigen, dass beim Erstellen des Streams eine Konvertierung fehlgeschlagen ist oder nicht möglich war. „ QCborStreamReader “ führt niemals eine Ersetzung durch, und diese Funktion gibt nur dann „true“ zurück, wenn der Stream einen expliziten undefinierten Wert enthält.

Siehe auch type(), isSimpleType() und toSimpleType().

bool QCborStreamReader::isUnsignedInteger() const

Gibt „true“ zurück, wenn der Typ des aktuellen Elements eine vorzeichenlose Ganzzahl ist (d. h., wenn type() den Wert „ QCborStreamReader::UnsignedInteger “ zurückgibt). Wenn diese Funktion „true“ zurückgibt, können Sie toUnsignedInteger() oder toInteger() aufrufen, um diesen Wert auszulesen.

Siehe auch type(), toUnsignedInteger(), toInteger(), isInteger() und isNegativeInteger().

bool QCborStreamReader::isValid() const

Gibt „true“ zurück, wenn das aktuelle Element gültig ist, andernfalls „false“. Das aktuelle Element kann ungültig sein, wenn ein Dekodierungsfehler aufgetreten ist oder gerade das letzte Element eines Arrays oder einer Map geparst wurde.

Hinweis: Diese Funktion ist nicht das Gegenteil von ` isNull()`. `Null` ist ein normaler CBOR-Typ, der von der Anwendung behandelt werden muss.

Siehe auch „ type()“ und „ isInvalid()“.

QCborError QCborStreamReader::lastError() const

Gibt den letzten Fehler bei der Dekodierung des Streams zurück, falls vorhanden. Wenn kein Fehler aufgetreten ist, wird ein ` QCborError::NoError` zurückgegeben.

Siehe auch ` isValid()`.

bool QCborStreamReader::leaveContainer()

Verlässt das Array oder die Map, deren Elemente gerade verarbeitet wurden, und positioniert den Decoder auf das nächste Element nach dem Ende des Containers. Gibt „true“ zurück, wenn das Verlassen des Containers erfolgreich war, andernfalls „false“ (in der Regel ein Parsing-Fehler). Jeder Aufruf von ` enterContainer()` muss mit einem Aufruf von `leaveContainer()` gepaart sein.

Diese Funktion darf nur aufgerufen werden, wenn ` hasNext()` `false` zurückgegeben hat und ` containerDepth()` ungleich Null ist. Ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch ` enterContainer()`, ` parentContainerType()` und ` containerDepth()`.

quint64 QCborStreamReader::length() const

Gibt die Länge der Zeichenkette oder des Byte-Arrays zurück oder, falls bekannt, die Anzahl der Elemente in einem Array bzw. die Anzahl der Elementpaare in einer Map. Diese Funktion darf nicht aufgerufen werden, wenn die Länge unbekannt ist (d. h., wenn isLengthKnown() den Wert „false“ zurückgegeben hat). Dies ist ein Fehler und führt dazu, dass „ QCborStreamReader “ das Parsen des Eingabestroms beendet.

Siehe auch isLengthKnown(), QCborStreamWriter::startArray() und QCborStreamWriter::startMap().

bool QCborStreamReader::next(int maxRecursion = 10000)

Die Dekodierung des CBOR-Streams um ein Element vorwärtsschieben. Diese Funktion sollte in der Regel beim Parsen von Basiselementen mit fester Breite (d. h. Ganzzahlen, einfache Werte, Tags und Gleitkommawerte) aufgerufen werden. Die Funktion kann jedoch auch aufgerufen werden, wenn es sich bei dem aktuellen Element um eine Zeichenkette, ein Array oder eine Map handelt; in diesem Fall wird das gesamte Element einschließlich aller darin enthaltenen Elemente übersprungen.

Diese Funktion gibt „true“ zurück, wenn der Sprung erfolgreich war, andernfalls „false“. Der Aufruf kann fehlschlagen, wenn der Stream beschädigt oder unvollständig ist oder wenn die Verschachtelungstiefe von Arrays und Maps den Wert „ maxRecursion “ überschreitet. Der Aufruf dieser Funktion, wenn „ hasNext()“ den Wert „false“ zurückgegeben hat, ist ebenfalls ein Fehler. Gibt diese Funktion „false“ zurück, liefert „ lastError()“ den Fehlercode, der die Art des Fehlers angibt.

Siehe auch lastError(), isValid() und hasNext().

QCborStreamReader::Type QCborStreamReader::parentContainerType() const

Gibt entweder „ QCborStreamReader::Array “ oder „ QCborStreamReader::Map “ zurück, je nachdem, ob der Container, der das aktuelle Element enthält, ein Array bzw. ein Map war. Wenn gerade das Stammelement analysiert wird, gibt diese Funktion „ QCborStreamReader::Invalid “ zurück.

Siehe auch containerDepth() und enterContainer().

[since 6.7] QByteArray QCborStreamReader::readAllByteArray()

Dekodiert die aktuelle Byte-Zeichenkette und gibt sie zurück. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt ein Fehler auf, gibt diese Funktion ein standardmäßig initialisiertes `QByteArray()` zurück, das sich jedoch möglicherweise nicht von bestimmten leeren Byte-Zeichenketten unterscheiden lässt. Überprüfen Sie stattdessen ` lastError()`, um festzustellen, ob ein Fehler aufgetreten ist.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Zeichenfolgen. Daher darf sie nur aufgerufen werden, wenn ` isByteArray()` wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise von einem Socket oder einer Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readByteArray(), readStringChunk(), isByteArray() und readAllString().

[since 6.7] QString QCborStreamReader::readAllString()

Dekodiert die aktuelle Textzeichenkette und gibt sie zurück. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt ein Fehler auf, gibt diese Funktion einen standardmäßig konstruierten QString() zurück, der sich jedoch möglicherweise nicht von bestimmten leeren Textzeichenketten unterscheiden lässt. Überprüfen Sie stattdessen lastError(), um festzustellen, ob ein Fehler aufgetreten ist.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn isString() den Wert „true“ zurückgegeben hat; ein Aufruf unter anderen Bedingungen ist ein Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise von einem Socket oder einer Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readString(), readStringChunk(), isString() und readAllByteArray().

[since 6.7] QByteArray QCborStreamReader::readAllUtf8String()

Dekodiert die aktuelle Textzeichenkette und gibt sie zurück. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt ein Fehler auf, gibt diese Funktion einen standardmäßig konstruierten QString() zurück, der sich jedoch möglicherweise nicht von bestimmten leeren Textzeichenketten unterscheiden lässt. Überprüfen Sie stattdessen lastError(), um festzustellen, ob ein Fehler aufgetreten ist.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn isString() den Wert „true“ zurückgegeben hat; ein Aufruf unter anderen Bedingungen ist ein Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise von einem Socket oder einer Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readString(), readStringChunk(), isString() und readAllByteArray().

[since 6.7] bool QCborStreamReader::readAndAppendToByteArray(QByteArray &dst)

Dekodiert die aktuelle Byte-Zeichenkette und hängt sie an dst an. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt während der Dekodierung ein Fehler auf, wurden möglicherweise dennoch andere Blöcke, die erfolgreich dekodiert werden konnten, in dst geschrieben. Gibt true zurück, wenn die Dekodierung fehlerfrei verlief, andernfalls false.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Zeichenketten. Daher darf sie nur aufgerufen werden, wenn isByteArray() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise über einen Socket oder eine Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readByteArray(), readStringChunk(), isByteArray() und readAndAppendToString().

[since 6.7] bool QCborStreamReader::readAndAppendToString(QString &dst)

Dekodiert die aktuelle Textzeichenkette und hängt sie an ` dst` an. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt während der Dekodierung ein Fehler auf, wurden möglicherweise dennoch andere Blöcke, die erfolgreich dekodiert werden konnten, in ` dst ` geschrieben. Gibt ` true ` zurück, wenn die Dekodierung fehlerfrei verlief, andernfalls ` false `.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn „ isString()“ den Wert „true“ zurückgegeben hat; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise über einen Socket oder eine Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readString(), readStringChunk(), isString() und readAndAppendToByteArray().

[since 6.7] bool QCborStreamReader::readAndAppendToUtf8String(QByteArray &dst)

Dekodiert die aktuelle Textzeichenkette und hängt sie an ` dst` an. Wenn die Zeichenkette in Blöcke unterteilt ist, durchläuft diese Funktion alle Blöcke und fügt sie zusammen. Tritt während der Dekodierung ein Fehler auf, wurden möglicherweise dennoch andere Blöcke, die erfolgreich dekodiert werden konnten, in ` dst ` geschrieben. Gibt ` true ` zurück, wenn die Dekodierung fehlerfrei verlief, andernfalls ` false `.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn isString() den Wert „true“ zurückgegeben hat; ein Aufruf unter anderen Bedingungen ist ein Fehler.

Hinweis: Diese Funktion kann nicht fortgesetzt werden. Das heißt, diese Funktion sollte nicht in Kontexten verwendet werden, in denen noch CBOR-Daten empfangen werden könnten, beispielsweise von einem Socket oder einer Pipe. Sie sollte nur verwendet werden, wenn die vollständigen Daten bereits empfangen wurden und in den Eingabeparametern ` QByteArray ` oder ` QIODevice` verfügbar sind.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch readString(), readStringChunk(), isString() und readAndAppendToByteArray().

QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readByteArray()

Dekodiert einen Byte-Array-Block aus der CBOR-Zeichenkette und gibt ihn zurück. Diese Funktion wird sowohl für reguläre als auch für in Blöcke unterteilte Inhalte verwendet, daher muss der Aufrufer diese Funktion immer in einer Schleife aufrufen, selbst wenn isLengthKnown() wahr ist. Diese Funktion wird typischerweise wie folgt verwendet:

QByteArray decodeBytearray(QCborStreamReader &reader)
{
    QByteArray result;
    auto 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;
}

Die Funktion ` readAllByteArray()` implementiert die oben beschriebene Schleife sowie einige zusätzliche Prüfungen.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Zeichenketten. Daher darf sie nur aufgerufen werden, wenn isByteArray() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch readAllByteArray(), readString(), isByteArray() und readStringChunk().

QCborStreamReader::StringResult<QString> QCborStreamReader::readString()

Dekodiert einen String-Block aus dem CBOR-String und gibt ihn zurück. Diese Funktion wird sowohl für reguläre als auch für in Blöcke unterteilte String-Inhalte verwendet, daher muss der Aufrufer diese Funktion immer in einer Schleife aufrufen, selbst wenn isLengthKnown() wahr ist. Diese Funktion wird typischerweise wie folgt verwendet:

QString decodeString(QCborStreamReader &reader)
{
    QString result;
    auto 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;
}

Die Funktion ` readAllString()` implementiert die oben genannte Schleife sowie einige zusätzliche Prüfungen.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn isString() „true“ zurückgegeben hat; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch ` readAllString()`, ` readByteArray()`, ` isString()` und ` readStringChunk()`.

QCborStreamReader::StringResult<qsizetype> QCborStreamReader::readStringChunk(char *ptr, qsizetype maxlen)

Liest den aktuellen String-Block in den Puffer, auf den ptr zeigt und dessen Größe maxlen beträgt. Diese Funktion gibt ein StringResult -Objekt zurück, wobei die Anzahl der in ptr kopierten Bytes im Mitglied \l StringResult::data gespeichert ist. Das Mitglied \l StringResult::status gibt an, ob beim Lesen des Strings ein Fehler aufgetreten ist, ob Daten kopiert wurden oder ob es sich um den letzten Block handelte.

Diese Funktion kann sowohl für die Typen „ String “ als auch für „ ByteArray “ aufgerufen werden. Bei Letzterem liest diese Funktion dieselben Daten ein, die „ readByteArray()“ zurückgegeben hätte. Bei Zeichenketten gibt sie das UTF-8-Äquivalent des „ QString “ zurück, das zurückgegeben worden wäre.

Diese Funktion wird in der Regel zusammen mit ` currentStringChunkSize()` in einer Schleife verwendet. Zum Beispiel:

QCborStreamReader::StringResult<qsizetype> result;
do {
    qsizetype size = reader.currentStringChunkSize();
    qsizetype oldsize = buffer.size();
    buffer.resize(oldsize + size);
    result = reader.readStringChunk(buffer.data() + oldsize, size);
} while (result.status == QCborStreamReader::Ok);

Im Gegensatz zu readByteArray() und readString() unterliegt diese Funktion keinen implementierungsbedingten Einschränkungen von QByteArray und QString.

Hinweis: Diese Funktion führt keine Überprüfung durch, ob der UTF-8-Inhalt korrekt formatiert ist. Das bedeutet, dass diese Funktion den Fehler „ QCborError::InvalidUtf8String “ nicht ausgibt, selbst wenn „ readString()“ dies tut.

Siehe auch currentStringChunkSize(), readString(), readByteArray(), isString() und isByteArray().

[since 6.7] QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readUtf8String()

Dekodiert einen String-Block aus dem CBOR-String und gibt ihn zurück. Diese Funktion wird sowohl für reguläre als auch für in Blöcke unterteilte String-Inhalte verwendet, daher muss der Aufrufer diese Funktion immer in einer Schleife aufrufen, selbst wenn isLengthKnown() wahr ist. Diese Funktion wird typischerweise wie im folgenden Beispiel für readString() verwendet:

QString decodeString(QCborStreamReader &reader)
{
    QString result;
    auto 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;
}

Die Funktion ` readAllUtf8String()` implementiert die oben genannte Schleife sowie einige zusätzliche Prüfungen.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen oder Byte-Arrays. Daher darf sie nur aufgerufen werden, wenn isString() den Wert „true“ zurückgegeben hat; der Aufruf unter anderen Bedingungen führt zu einem Fehler.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch ` readAllString()`, ` readByteArray()`, ` isString()` und ` readStringChunk()`.

void QCborStreamReader::reparse()

Das aktuelle Element wird erneut geparst. Diese Funktion muss aufgerufen werden, wenn im Quell- QIODevice weitere Daten verfügbar werden, nachdem das Parsen fehlgeschlagen ist, weil das Ende der Eingabedaten vor dem Ende des CBOR-Streams erreicht wurde.

Beim Lesen aus QByteArray() ruft die Funktion addData() diese Funktion automatisch auf. Der Aufruf dieser Funktion, wenn der Lesevorgang nicht fehlgeschlagen ist, hat keine Auswirkung.

void QCborStreamReader::reset()

Setzt die Quelle auf den Anfang zurück und löscht den Decoder-Zustand. Wenn es sich bei den Quelldaten um ein ` QByteArray` handelte, startet ` QCborStreamReader ` am Anfang des Arrays neu.

Wenn es sich bei den Quelldaten um einen „ QIODevice “ handelt, ruft diese Funktion „ QIODevice::reset()“ auf, wodurch die Byte-Position 0 angesteuert wird. Wird der CBOR-Stream nicht am Anfang des Geräts (z. B. am Anfang einer Datei) gefunden, führt diese Funktion wahrscheinlich zu einem falschen Ergebnis. Positionieren Sie stattdessen den „ QIODevice “ auf den richtigen Offset und rufen Sie „ setDevice()“ auf.

Siehe auch „ clear “ () und „ setDevice “ ().

void QCborStreamReader::setDevice(QIODevice *device)

Legt die Datenquelle auf „ device “ fest und setzt den Decoder in den Ausgangszustand zurück.

Siehe auch device().

bool QCborStreamReader::toBool() const

Gibt den booleschen Wert des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen. Daher darf sie nur aufgerufen werden, wenn „ isTrue()“, „ isFalse()“ oder „ isBool()“ den Wert „true“ zurückgegeben haben; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isBool(), isTrue(), isFalse() und toInteger().

double QCborStreamReader::toDouble() const

Gibt den 64-Bit-Gleitkommawert mit doppelter Genauigkeit des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von anderen Gleitkomma-Typen oder von Ganzzahlwerten. Daher darf sie nur aufgerufen werden, wenn isDouble() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isDouble(), toFloat16() und toFloat().

qfloat16 QCborStreamReader::toFloat16() const

Gibt den 16-Bit-Gleitkommawert mit halber Genauigkeit des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von anderen Gleitkomma-Typen oder von ganzzahligen Werten. Daher darf sie nur aufgerufen werden, wenn isFloat16() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isFloat16(), toFloat() und toDouble().

float QCborStreamReader::toFloat() const

Gibt den 32-Bit-Gleitkommawert mit einfacher Genauigkeit des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von anderen Gleitkommatypen oder von Ganzzahlwerten. Daher darf sie nur aufgerufen werden, wenn isFloat() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isFloat(), toFloat16() und toDouble().

qint64 QCborStreamReader::toInteger() const

Gibt den ganzzahligen Wert des aktuellen Elements zurück, unabhängig davon, ob dieser negativ, positiv oder null ist. Ist der Wert größer als263 – 1 oder kleiner als–263, kommt es zu einem Überlauf, und der zurückgegebene Wert weist ein falsches Vorzeichen auf. Wenn diese Werte verarbeitet werden müssen, verwenden Sie stattdessen toUnsignedInteger() oder toNegativeInteger().

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von booleschen Werten oder CBOR-Tags. Daher darf sie nur aufgerufen werden, wenn isInteger() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isInteger(), toUnsignedInteger() und toNegativeInteger().

QCborNegativeInteger QCborStreamReader::toNegativeInteger() const

Gibt den negativen ganzzahligen Wert des aktuellen Elements zurück. QCborNegativeValue ist eine 64-Bit-Ganzzahl ohne Vorzeichen, die den Absolutwert der negativen Zahl enthält, die im CBOR-Stream gespeichert wurde. Darüber hinaus steht QCborNegativeValue(0) für die Zahl-264.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von booleschen Werten oder CBOR-Tags. Daher darf sie nur aufgerufen werden, wenn isNegativeInteger() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Diese Funktion kann verwendet werden, um Zahlen zu erhalten, die außerhalb des Bereichs des Rückgabetyps von ` toInteger()` liegen. Von der Verwendung negativer Zahlen kleiner als-263 wird jedoch dringend abgeraten.

Siehe auch type(), toInteger(), isNegativeInteger() und isUnsignedInteger().

QCborSimpleType QCborStreamReader::toSimpleType() const

Gibt den Wert des aktuellen einfachen Typs zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von Ganzzahlen. Daher darf sie nur aufgerufen werden, wenn isSimpleType() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Siehe auch isSimpleType(), isTrue(), isFalse(), isBool(), isNull() und isUndefined().

QCborTag QCborStreamReader::toTag() const

Gibt den Tag-Wert des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht aus Ganzzahlen. Daher darf sie nur aufgerufen werden, wenn isTag() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Tags sind 64-Bit-Zahlen, die generischen CBOR-Typen zugeordnet sind und diesen eine zusätzliche Bedeutung verleihen. Eine Liste bekannter Tags finden Sie in der Aufzählung ` QCborKnownTags `.

Siehe auch isTag(), toInteger() und QCborKnownTags.

quint64 QCborStreamReader::toUnsignedInteger() const

Gibt den vorzeichenlosen Ganzzahlwert des aktuellen Elements zurück.

Diese Funktion führt keine Typkonvertierungen durch, auch nicht von boolischen Werten oder CBOR-Tags. Daher darf sie nur aufgerufen werden, wenn isUnsignedInteger() wahr ist; ein Aufruf unter anderen Bedingungen führt zu einem Fehler.

Diese Funktion kann verwendet werden, um Zahlen zu erhalten, die außerhalb des Bereichs des Rückgabetyps von ` toInteger()` liegen.

Siehe auch ` type()`, ` toInteger()`, ` isUnsignedInteger()` und ` isNegativeInteger()`.

QCborStreamReader::Type QCborStreamReader::type() const

Gibt den Typ des aktuellen Elements zurück. Es handelt sich entweder um einen der gültigen Typen oder um „Invalid“.

Siehe auch „ isValid()“, „ isUnsignedInteger()“, „ isNegativeInteger()“, „ isInteger()“, „ isByteArray()“, „ isString()“, „ isArray()“, „ isMap()“, „ isTag()“, „ isSimpleType()“, „ isBool()“, „ isFalse()“, „ isTrue()“, „ isNull()“, „ isUndefined()“, „ isFloat16()“, „ isFloat()“und „ isDouble()“.

[delete] QCborStreamReader &QCborStreamReader::operator=(const QCborStreamReader &)

other Weist dieser „ QCborStreamReader “-Instanz „ “ durch Kopieren zu. Diese Funktion wird gelöscht.

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