QCborValue Class
Die Klasse QCborValue kapselt einen Wert in CBOR. Mehr...
Kopfzeile: | #include <QCborValue> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QCborValue ist Teil der CBOR-Unterstützung in Qt.
Diese Klasse ist stark vergleichbar.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Typen
enum | DiagnosticNotationOption { Compact, LineWrapped, ExtendedFormat } |
flags | DiagnosticNotationOptions |
enum | EncodingOption { NoTransformation, UseFloat, UseFloat16, UseIntegers } |
flags | EncodingOptions |
enum | Type { Integer, ByteArray, String, Array, Map, …, Uuid } |
Öffentliche Funktionen
QCborValue() | |
QCborValue(QCborArray &&a) | |
QCborValue(QCborMap &&m) | |
QCborValue(QCborSimpleType st) | |
QCborValue(QCborValue::Type t_) | |
QCborValue(QStringView s) | |
QCborValue(bool b) | |
QCborValue(const QByteArray &ba) | |
QCborValue(const QCborArray &a) | |
QCborValue(const QCborMap &m) | |
QCborValue(const QDateTime &dt) | |
QCborValue(const QRegularExpression &rx) | |
QCborValue(const QString &s) | |
QCborValue(const QUrl &url) | |
QCborValue(const QUuid &uuid) | |
QCborValue(double d) | |
QCborValue(qint64 i) | |
QCborValue(std::nullptr_t) | |
QCborValue(QCborTag tag, const QCborValue &tv = QCborValue()) | |
QCborValue(QLatin1StringView s) | |
QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue()) | |
QCborValue(const QCborValue &other) | |
QCborValue(QCborValue &&other) | |
~QCborValue() | |
int | compare(const QCborValue &other) const |
bool | isArray() const |
bool | isBool() const |
bool | isByteArray() const |
bool | isContainer() const |
bool | isDateTime() const |
bool | isDouble() const |
bool | isFalse() const |
bool | isInteger() const |
bool | isInvalid() const |
bool | isMap() const |
bool | isNull() const |
bool | isRegularExpression() const |
bool | isSimpleType() const |
bool | isSimpleType(QCborSimpleType st) const |
bool | isString() const |
bool | isTag() const |
bool | isTrue() const |
bool | isUndefined() const |
bool | isUrl() const |
bool | isUuid() const |
void | swap(QCborValue &other) |
QCborTag | tag(QCborTag defaultValue = QCborTag(-1)) const |
QCborValue | taggedValue(const QCborValue &defaultValue = QCborValue()) const |
QCborArray | toArray() const |
QCborArray | toArray(const QCborArray &defaultValue) const |
bool | toBool(bool defaultValue = false) const |
QByteArray | toByteArray(const QByteArray &defaultValue = {}) const |
QByteArray | toCbor(QCborValue::EncodingOptions opt = NoTransformation) const |
void | toCbor(QCborStreamWriter &writer, QCborValue::EncodingOptions opt = NoTransformation) const |
QDateTime | toDateTime(const QDateTime &defaultValue = {}) const |
QString | toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opts = Compact) const |
double | toDouble(double defaultValue = 0) const |
qint64 | toInteger(qint64 defaultValue = 0) const |
QJsonValue | toJsonValue() const |
QCborMap | toMap() const |
QCborMap | toMap(const QCborMap &defaultValue) const |
QRegularExpression | toRegularExpression(const QRegularExpression &defaultValue = {}) const |
QCborSimpleType | toSimpleType(QCborSimpleType defaultValue = QCborSimpleType::Undefined) const |
QString | toString(const QString &defaultValue = {}) const |
QUrl | toUrl(const QUrl &defaultValue = {}) const |
QUuid | toUuid(const QUuid &defaultValue = {}) const |
QVariant | toVariant() const |
QCborValue::Type | type() const |
QCborValue & | operator=(const QCborValue &other) |
QCborValue & | operator=(QCborValue &&other) |
QCborValueRef | operator[](const QString &key) |
const QCborValue | operator[](const QString &key) const |
QCborValueRef | operator[](QLatin1StringView key) |
QCborValueRef | operator[](qint64 key) |
const QCborValue | operator[](QLatin1StringView key) const |
const QCborValue | operator[](qint64 key) const |
Statische öffentliche Mitglieder
QCborValue | fromCbor(QCborStreamReader &reader) |
QCborValue | fromCbor(const QByteArray &ba, QCborParserError *error = nullptr) |
QCborValue | fromCbor(const char *data, qsizetype len, QCborParserError *error = nullptr) |
QCborValue | fromCbor(const quint8 *data, qsizetype len, QCborParserError *error = nullptr) |
QCborValue | fromJsonValue(const QJsonValue &v) |
QCborValue | fromVariant(const QVariant &variant) |
Verwandte Nicht-Mitglieder
bool | operator!=(const QCborValue &lhs, const QCborValue &rhs) |
bool | operator<(const QCborValue &lhs, const QCborValue &rhs) |
bool | operator<=(const QCborValue &lhs, const QCborValue &rhs) |
bool | operator==(const QCborValue &lhs, const QCborValue &rhs) |
bool | operator>(const QCborValue &lhs, const QCborValue &rhs) |
bool | operator>=(const QCborValue &lhs, const QCborValue &rhs) |
Detaillierte Beschreibung
Diese Klasse kann verwendet werden, um einen der vielen in CBOR verfügbaren Typen zu speichern. CBOR ist die Concise Binary Object Representation, eine sehr kompakte Form der binären Datenkodierung, die eine Obermenge von JSON ist. Es wurde von der IETF Constrained RESTful Environments (CoRE) WG entwickelt, die es in vielen neuen RFCs verwendet hat. Es ist dafür gedacht, neben dem CoAP-Protokoll verwendet zu werden.
CBOR hat drei Gruppen von eingebauten Typen:
- Grundtypen: Ganzzahlen, Gleitkomma (double), Boolesche Werte, Null, usw.
- String-ähnliche Typen: Strings und Byte-Arrays
- Container: Arrays und Maps
Darüber hinaus unterstützt CBOR eine Form der Typerweiterung, indem einem der oben genannten Typen ein "Tag" zugeordnet wird, um weitere Informationen zu übermitteln. Zum Beispiel wird eine UUID durch ein Tag und ein Byte-Array dargestellt, das die 16 Bytes des UUID-Inhalts enthält. QCborValue unterstützt die Erstellung und Dekodierung mehrerer dieser erweiterten Typen direkt mit Qt-Klassen (wie QUuid).
Die vollständige Liste finden Sie unter QCborValue::Type. Der Typ eines QCborValue kann mit type() oder einer der "isXxxx" Funktionen abgefragt werden.
Erweiterte Typen und getaggte Werte
Ein getaggter Wert ist ein normaler QCborValue, der mit einer Zahl gepaart ist, die sein Tag ist. Siehe QCborKnownTags für weitere Informationen darüber, welche Tags in der API enthalten sind, sowie für die vollständige, offizielle Liste. Solche Kombinationen bilden erweiterte Typen.
QCborValue unterstützt bestimmte erweiterte Typen in der API, wie URL (mit QUrl) und UUID (mit QUuid). Andere erweiterte Typen, die in der API nicht unterstützt werden, werden durch einen QCborValue vom Typ Tag dargestellt. Das Tag kann später mit tag() abgerufen werden und der getaggte Wert mit taggedValue().
Um zukünftige Kompatibilität zu unterstützen, werden QCborValues, die erweiterte Qt-Typen enthalten, mit dem Tag-Typ desselben Inhalts verglichen. Mit anderen Worten, der folgende Ausdruck ist wahr:
QCborValue(uuid) == QCborValue(QCborKnownTags::Uuid, uuid.toRfc4122());
Undefinierte und Null-Werte
QCborValue kann den Wert "null" enthalten, der von keinem bestimmten Typ ist. Er ähnelt dem C++-Typ std::nullptr_t
, dessen einzig möglicher Wert nullptr
ist. QCborValue hat einen Konstruktor, der einen solchen Typ annimmt und einen Null-QCborValue erzeugt.
Nullwerte werden verwendet, um anzuzeigen, dass ein optionaler Wert nicht vorhanden ist. In dieser Hinsicht ähnelt er dem Typ std::optional
der C++ Standard Library, wenn dieser deaktiviert ist. Im Gegensatz zum C++-Typ sind CBOR-Nullwerte einfach vom Typ "Null", und es ist nicht möglich, den konkreten Typ zu bestimmen, den sie ersetzen.
QCborValue kann auch vom Typ "undefined" sein, was einen Wert vom Typ "undefined" darstellt. Tatsächlich ist es das, was der QCborValue-Standardkonstruktor erzeugt.
Undefinierte Werte unterscheiden sich von Nullwerten. Während Nullen verwendet werden, um einen optionalen Wert anzuzeigen, der nicht bereitgestellt wird, wird Undefined normalerweise verwendet, um anzuzeigen, dass ein erwarteter Wert nicht bereitgestellt werden konnte, normalerweise aufgrund eines Fehlers oder einer Vorbedingung, die nicht erfüllt werden konnte.
Solche Werte sind vollkommen gültig und können in CBOR-Streams erscheinen, im Gegensatz zu JSON-Inhalten und dem undefinierten Bit von QJsonValue. Aber wie das Undefined-Bit von QJsonValue wird es von value() oder dem Nur-Lese-Operator[] eines CBOR-Containers bei ungültigen Suchvorgängen zurückgegeben (index out of range für QCborArray oder key not found für QCborMap). Es ist nicht möglich, einen solchen Fall von dem Wert Undefined zu unterscheiden. Wenn dies erforderlich ist, überprüfen Sie die Größe von QCborArray und verwenden Sie die QCborMap iterator API.
Einfache Typen
CBOR unterstützt zusätzliche einfache Typen, die, wie Null und Undefined, keinen anderen Wert haben. Sie werden austauschbar "Simple Types" und "Simple Values" genannt. CBOR kodiert Boolesche Werte als zwei verschiedene Typen (einen für true
und einen für false
), aber QCborValue hat eine einfache API für sie.
Es gibt derzeit keine anderen definierten einfachen CBOR-Typen. QCborValue unterstützt sie einfach durch ihre Nummer mit APIs wie isSimpleType() und toSimpleType(), die für die Kompatibilität mit zukünftigen Spezifikationen verfügbar sind, bevor die Qt API aktualisiert werden kann. Von ihrer Verwendung vor einer solchen Spezifikation wird abgeraten, da andere CBOR-Implementierungen sie möglicherweise nicht vollständig unterstützen.
CBOR-Unterstützung
QCborValue unterstützt alle CBOR-Funktionen, die zur Erstellung von kanonischen und strikten Datenströmen erforderlich sind. Es implementiert fast alle der in RFC 7049 spezifizierten Funktionen.
In der folgenden Tabelle sind die CBOR-Funktionen aufgeführt, die QCborValue unterstützt.
Merkmal | Unterstützung |
---|---|
Zahlen ohne Vorzeichen | Ja (qint64 Bereich) |
Negative Zahlen | Ja (Bereichqint64 ) |
Byte-Zeichenketten | Ja |
Text-Zeichenfolgen | Ja |
Gekapselte Zeichenketten | siehe unten |
Tags | Ja (willkürlich) |
Boolesche Werte | Ja |
Null | Ja |
Undefiniert | Ja |
Beliebige einfache Werte | Ja |
Halbgenaue Fließkommazahlen (16-Bit) | Ja |
Einfachpräzise Fließkommazahl (32-Bit) | Ja |
Doppeltgenaue Fließkommazahl (64-Bit) | Ja |
Unendliche Zahlen und NaN-Gleitkomma | Ja |
Arrays und Zuordnungen mit festgelegter Länge | Ja |
Arrays und Zuordnungen unbestimmter Länge | Ja |
Andere Schlüsseltypen als Strings und Ganzzahlen | Ja (willkürlich) |
Ganzzahlen in QCborValue sind auf den Bereich des Typs qint64 beschränkt. Das heißt, von -9,223,372,036,854,775,808 (-263) bis 9,223,372,036,854,775,807 (263 - 1). CBOR selbst kann Ganzzahlwerte außerhalb dieses Bereichs darstellen, was QCborValue nicht unterstützt. Wenn ein Stream mit fromCbor() dekodiert wird, der einen dieser Werte enthält, konvertiert QCborValue automatisch nach Double, wobei jedoch bis zu 11 Bits an Genauigkeit verloren gehen können.
fromCbor() ist in der Lage, gechunkte Strings zu dekodieren, wird aber die Chunks immer zu einem einzigen QCborValue zusammenfügen. Aus diesem Grund werden bei der Verwendung von toCbor() immer nicht gechunkelte Strings geschrieben (was im kanonischen Format ohnehin erforderlich ist).
QCborValue konvertiert halb- und einfachgenaue Fließkommazahlen im CBOR-Stream immer in doppeltgenaue Werte. Die Funktion toCbor() kann einen Parameter annehmen, der angibt, dass sie wiederhergestellt werden sollen.
QCborValueRef
QCborValueRef ist eine Hilfsklasse für QCborArray und QCborMap. Es ist der Typ, den Sie erhalten, wenn Sie eine der mutierenden APIs in diesen Klassen verwenden. Im Gegensatz zu QCborValue können dieser Klasse neue Werte zugewiesen werden. Wenn dies geschieht, wird das Array oder die Map, auf die sie verweist, mit dem neuen Wert geändert. In allen anderen Aspekten ist die API identisch mit QCborValue.
{Parsing und Anzeige von CBOR-Daten}
Siehe auch QCborArray, QCborMap, QCborStreamReader, QCborStreamWriter, QJsonValue, QJsonDocument, Serialisierungskonverter, und Speichern und Laden eines Spiels.
Dokumentation der Mitgliedstypen
enum QCborValue::DiagnosticNotationOption
flags QCborValue::DiagnosticNotationOptions
Diese Aufzählung wird im Optionsargument von toDiagnosticNotation() verwendet, um das Ausgabeformat zu ändern.
Konstante | Wert | Beschreibung |
---|---|---|
QCborValue::Compact | 0x00 | Verwendet keine Zeilenumbrüche und erzeugt eine kompakte Darstellung. |
QCborValue::LineWrapped | 0x01 | Verwendet Zeilenumbrüche, eine QCborValue pro Zeile. |
QCborValue::ExtendedFormat | 0x02 | Verwendet einige andere Optionen zur Darstellung von Werten, die in RFC 7049 nicht enthalten sind. Diese Optionen können sich noch ändern. |
Derzeit ändert ExtendedFormat
die Art und Weise, wie Byte-Arrays dargestellt werden. Ohne diese Option werden sie immer hex-kodiert und ohne Leerzeichen dargestellt. Mit dieser Option verwendet QCborValue::toCbor() je nach Kontext entweder Hex mit Leerzeichen, base64 oder base64url-Kodierung.
Der Typ DiagnosticNotationOptions ist ein Typedef für QFlags<DiagnosticNotationOption>. Er speichert eine OR-Kombination von DiagnosticNotationOption-Werten.
Siehe auch toDiagnosticNotation().
enum QCborValue::EncodingOption
flags QCborValue::EncodingOptions
Diese Aufzählung wird im Optionsargument von toCbor() verwendet, um das Verhalten des Encoders zu ändern.
Konstante | Wert | Beschreibung |
---|---|---|
QCborValue::NoTransformation | 0 | (Standard) Führt keine Transformationen durch. |
QCborValue::UseFloat | 0x02 | Weist den Kodierer an, wann immer möglich IEEE 754 single-precision floating point (d.h. float ) zu verwenden. |
QCborValue::UseFloat16 | UseFloat | 0x04 | Weist den Encoder an, wann immer möglich IEEE 754 halbpräzise Fließkommazahlen (d. h. qfloat16 ) zu verwenden. Impliziert UseFloat . |
QCborValue::UseIntegers | 0x08 | Weist den Kodierer an, Ganzzahlen zu verwenden, wenn ein Wert des Typs Double eine Ganzzahl enthält. |
Die Verwendung von UseFloat16
ist erforderlich, um den Stream im kanonischen Format zu kodieren, ist aber ansonsten nicht notwendig.
Der Typ EncodingOptions ist ein Typedef für QFlags<EncodingOption>. Er speichert eine OR-Kombination von EncodingOption-Werten.
Siehe auch toCbor().
enum QCborValue::Type
Diese Aufzählung stellt den Typ QCborValue dar. Sie wird von der Funktion type() zurückgegeben.
Die eingebauten CBOR-Typen sind:
Konstante | Wert | Beschreibung |
---|---|---|
QCborValue::Integer | 0x00 | qint64 : Ein Integer-Wert |
QCborValue::ByteArray | 0x40 | QByteArray: ein Byte-Array ("Byte-String") |
QCborValue::String | 0x60 | QString: ein Unicode-String ("Text-String") |
QCborValue::Array | 0x80 | QCborArray: ein Array von QCborValues |
QCborValue::Map | 0xa0 | QCborMapQCborValue: ein assoziativer Container von QCborValues |
QCborValue::SimpleType | 0x100 | QCborSimpleTypeQCborValue: einer von mehreren einfachen Typen/Werten |
QCborValue::False | SimpleType + int(QCborSimpleType::False) | bool : der einfache Typ für value false |
QCborValue::True | SimpleType + int(QCborSimpleType::True) | bool : der einfache Typ für value true |
QCborValue::Null | SimpleType + int(QCborSimpleType::Null) | std::nullptr_t : der einfache Typ für den Nullwert |
QCborValue::Undefined | SimpleType + int(QCborSimpleType::Undefined) | (kein Typ) der einfache Typ für den undefinierten Wert |
QCborValue::Double | 0x202 | double : ein doppelt präziser Gleitkommawert |
QCborValue::Invalid | -1 | Kein gültiger Wert, dies weist normalerweise auf einen CBOR-Dekodierungsfehler hin. |
Zusätzlich kann QCborValue erweiterte Typen darstellen:
Konstante | Wert | Beschreibung |
---|---|---|
QCborValue::Tag | 0xc0 | Ein unbekannter oder nicht erkannter erweiterter Typ, dargestellt durch sein Tag (a QCborTag) und den getaggten Wert (a QCborValue) |
QCborValue::DateTime | 0x10000 | QDateTime: ein Datums- und Zeitstempel |
QCborValue::Url | 0x10020 | QUrleine URL oder URI |
QCborValue::RegularExpression | 0x10023 | QRegularExpression: das Muster eines regulären Ausdrucks |
QCborValue::Uuid | 0x10025 | QUuid: eine UUID |
Siehe auch type().
Dokumentation der Mitgliedsfunktionen
QCborValue::QCborValue(QCborArray &&a)
QCborValue::QCborValue(const QCborArray &a)
Erzeugt eine QCborValue mit dem Array a. Das Array kann später mit toArray() abgerufen werden.
Siehe auch toArray(), isArray(), und isMap().
Erzeugt eine QCborValue mit der Karte m. Die Karte kann später mit toMap() abgerufen werden.
Siehe auch toMap(), isMap(), und isArray().
QCborValue::QCborValue(QCborKnownTags tag, const QCborValue &tv = QCborValue())
QCborValue::QCborValue(QCborTag tag, const QCborValue &tv = QCborValue())
Erstellt eine QCborValue für den erweiterten Typ, der durch den Tag-Wert tag dargestellt wird, und den Tag-Wert tv. Das Tag kann später mit tag() und der getaggte Wert mit taggedValue() abgerufen werden.
Siehe auch isTag(), tag(), taggedValue(), und QCborKnownTags.
QCborArray QCborValue::toArray() const
QCborArray QCborValue::toArray(const QCborArray &defaultValue) const
Gibt den in diesem QCborValue gespeicherten Array-Wert zurück, wenn er vom Typ Array ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QCborArray durchführt.
Siehe auch isArray(), isByteArray(), isMap(), isContainer(), und toMap().
Gibt den in dieser QCborValue gespeicherten Map-Wert zurück, wenn er vom Typ Map ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QCborMap durchführt.
Siehe auch isMap(), isArray(), isContainer(), und toArray().
[static]
QCborValue QCborValue::fromCbor(const char *data, qsizetype len, QCborParserError *error = nullptr)
[static]
QCborValue QCborValue::fromCbor(const quint8 *data, qsizetype len, QCborParserError *error = nullptr)
Dies ist eine überladene Funktion.
Konvertiert len Bytes von data in ein QByteArray und ruft dann die Überladung dieser Funktion auf, die ein QByteArray akzeptiert und auch error übergibt, falls vorhanden.
QCborValue::QCborValue()
Erzeugt einen QCborValue vom Typ Undefined.
Nicht definierte CBOR-Werte werden verwendet, um fehlende Informationen anzuzeigen, in der Regel als Ergebnis eines früheren Vorgangs, der nicht wie erwartet abgeschlossen wurde. Sie werden auch von den APIs QCborArray und QCborMap verwendet, um anzuzeigen, dass das gesuchte Element nicht gefunden wurde.
Undefinierte Werte werden durch Undefined simple type repräsentiert. Aus diesem Grund geben QCborValues mit undefinierten Werten auch für isSimpleType() und isSimpleType(QCborSimpleType::Undefined)
den Wert true zurück.
Undefinierte Werte unterscheiden sich von Nullwerten.
QCborValue-Objekte mit undefinierten Werten unterscheiden sich auch von ungültigen QCborValue-Objekten. Die API erstellt keine ungültigen QCborValues, aber sie können als Ergebnis eines Parsing-Fehlers existieren.
Siehe auch isUndefined(), isNull(), und isSimpleType().
QCborValue::QCborValue(QCborSimpleType st)
Erzeugt einen QCborValue vom einfachen Typ st. Der Typ kann später sowohl mit toSimpleType() als auch mit isSimpleType(st) abgerufen werden.
Einfache CBOR-Typen sind Typen, die keinen zugehörigen Wert haben, wie z.B. der Typ std::nullptr_t
von C++, dessen einzig möglicher Wert nullptr
ist.
Wenn st QCborSimpleType::Null
ist, ist der resultierende QCborValue vom Typ Null und ähnlich für QCborSimpleType::Undefined
. Wenn st QCborSimpleType::False
oder QCborSimpleType::True
ist, ist der erzeugte QCborValue ein Boolean mit dem Wert false bzw. true.
Diese Funktion kann mit einfachen Typen verwendet werden, die nicht in der API definiert sind. Um zum Beispiel einen QCborValue mit dem einfachen Typ 12 zu erstellen, könnte man schreiben:
QCborValue value(QCborSimpleType(12));
Einfache Typen sollten nicht verwendet werden, bis eine Spezifikation für sie veröffentlicht wurde, da andere Implementierungen sie möglicherweise nicht richtig unterstützen. Die einfachen Typwerte 24 bis 31 sind reserviert und dürfen nicht verwendet werden.
isSimpleType(), isNull(), isUndefined(), isTrue(), isFalse()
QCborValue::QCborValue(QCborValue::Type t_)
Erzeugt einen QCborValue vom Typ t_. Der einem solchen Typ zugeordnete Wert (falls vorhanden) wird standardmäßig erzeugt.
Siehe auch type().
QCborValue::QCborValue(QStringView s)
Erzeugt einen QCborValue mit dem String-Wert s. Der Wert kann später mit toString() abgerufen werden.
Siehe auch toString(), isString(), und isByteArray().
QCborValue::QCborValue(bool b)
Erzeugt einen QCborValue mit dem booleschen Wert b. Der Wert kann später mit toBool() abgerufen werden.
Intern werden boolesche CBOR-Werte durch ein Paar von Typen dargestellt, einen für true und einen für false. Aus diesem Grund geben boolesche QCborValues true für isSimpleType() und einen von isSimpleType(QCborSimpleType::False)
oder isSimpleType(QCborSimpleType::True)
zurück.
Siehe auch toBool(), isBool(), isTrue(), isFalse(), und isSimpleType().
QCborValue::QCborValue(const QByteArray &ba)
Erzeugt einen QCborValue mit dem Byte-Array-Wert ba. Der Wert kann später mit toByteArray() abgerufen werden.
Siehe auch toByteArray(), isByteArray(), und isString().
[explicit]
QCborValue::QCborValue(const QDateTime &dt)
Erzeugt ein QCborValue-Objekt vom erweiterten Typ Datum/Uhrzeit, das den durch dt dargestellten Wert enthält. Der Wert kann später mit toDateTime() abgerufen werden.
Die CBOR-Datums-/Uhrzeittypen sind Erweiterungstypen, die Tags verwenden: entweder eine Zeichenkette (im ISO-Datumsformat), die als DateTime gekennzeichnet ist, oder eine Zahl (der Sekunden seit Beginn des Jahres 1970, UTC), die als UnixTime_t gekennzeichnet ist. Beim Parsen von CBOR-Streams konvertiert QCborValue UnixTime_t in den stringbasierten Typ.
Siehe auch toDateTime(), isDateTime(), und taggedValue().
[explicit]
QCborValue::QCborValue(const QRegularExpression &rx)
Erzeugt ein QCborValue-Objekt vom erweiterten Typ des regulären Ausdrucksmusters, das den durch rx dargestellten Wert enthält. Der Wert kann später mit toRegularExpression() abgerufen werden.
Der Typ des regulären Ausdrucks CBOR ist ein erweiterter Typ, der durch eine Zeichenkette dargestellt wird, die als RegularExpression markiert ist. Beachten Sie, dass reguläre Ausdrücke CBOR nur die Muster speichern, so dass alle Flags, die das QRegularExpression Objekt tragen kann, verloren gehen.
Siehe auch toRegularExpression(), isRegularExpression(), und taggedValue().
QCborValue::QCborValue(const QString &s)
Erzeugt einen QCborValue mit dem String-Wert s. Der Wert kann später mit toString() abgerufen werden.
Siehe auch toString(), isString(), und isByteArray().
[explicit]
QCborValue::QCborValue(const QUrl &url)
Erzeugt ein QCborValue-Objekt vom erweiterten Typ URL, das den durch url dargestellten Wert enthält. Der Wert kann später mit toUrl() abgerufen werden.
Der CBOR-URL-Typ ist ein erweiterter Typ, der durch eine als Url gekennzeichnete Zeichenkette dargestellt wird.
Siehe auch toUrl(), isUrl(), und taggedValue().
[explicit]
QCborValue::QCborValue(const QUuid &uuid)
Erzeugt ein QCborValue-Objekt vom erweiterten Typ UUID, das den durch uuid dargestellten Wert enthält. Der Wert kann später mit toUuid() abgerufen werden.
Der CBOR UUID-Typ ist ein erweiterter Typ, der durch ein Byte-Array mit dem Tag Uuid dargestellt wird.
Siehe auch toUuid(), isUuid(), und taggedValue().
QCborValue::QCborValue(double d)
Erzeugt einen QCborValue mit dem Fließkommawert d. Der Wert kann später mit toDouble() abgerufen werden.
CBOR Fließkommawerte unterscheiden sich von Integerwerten. Daher werden QCborValue-Objekte mit Ganzzahlen anders verglichen als QCborValue-Objekte mit Fließkommawerten, selbst wenn die in den Objekten enthaltenen Werte gleichwertig sind.
Siehe auch toDouble(), isDouble(), und isInteger().
QCborValue::QCborValue(qint64 i)
Erzeugt einen QCborValue mit dem Integer-Wert i. Der Wert kann später mit toInteger() abgerufen werden.
CBOR-Ganzzahlwerte unterscheiden sich von Fließkommawerten. Daher werden QCborValue-Objekte mit Integer-Werten anders verglichen als QCborValue-Objekte mit Fließkomma-Werten, selbst wenn die in den Objekten enthaltenen Werte gleich sind.
Siehe auch toInteger(), isInteger(), und isDouble().
QCborValue::QCborValue(std::nullptr_t)
Erzeugt einen QCborValue vom Typ Null.
CBOR-Nullwerte werden verwendet, um optionale Werte anzuzeigen, die nicht bereitgestellt wurden. Sie unterscheiden sich von undefinierten Werten dadurch, dass Nullwerte normalerweise nicht das Ergebnis eines früheren Fehlers oder Problems sind.
Siehe auch isNull(), isUndefined(), und isSimpleType().
QCborValue::QCborValue(QLatin1StringView s)
Dies ist eine überladene Funktion.
Erzeugt einen QCborValue mit der von s betrachteten Latin-1-Zeichenkette. Der Wert kann später mit toString() abgerufen werden.
Siehe auch toString(), isString(), und isByteArray().
[noexcept]
QCborValue::QCborValue(const QCborValue &other)
Kopiert den Inhalt von other in dieses Objekt.
[noexcept]
QCborValue::QCborValue(QCborValue &&other)
Dies ist eine überladene Funktion.
Verschiebt den Inhalt des other QCborValue-Objekts in dieses und gibt die Ressourcen dieses Objekts frei.
[noexcept]
QCborValue::~QCborValue()
Legt das aktuelle QCborValue Objekt ab und gibt alle zugehörigen Ressourcen frei.
int QCborValue::compare(const QCborValue &other) const
Vergleicht diesen Wert mit other und gibt eine ganze Zahl zurück, die angibt, ob dieser Wert vor (wenn das Ergebnis negativ ist) oder nach other (wenn das Ergebnis positiv ist) sortiert werden soll. Wenn diese Funktion 0 zurückgibt, sind die beiden Werte gleich und haben denselben Inhalt.
Wenn jedes QCborValue ein Array oder eine Map enthält, erfolgt der Vergleich rekursiv auf die darin enthaltenen Elemente.
Erweiterte Typen
QCborValue vergleicht gleich einen QCborValue, der einen erweiterten Typ enthält, wie Url und Url und seine äquivalente getaggte Darstellung. So ist zum Beispiel der folgende Ausdruck wahr:
QCborValue(QUrl("https://example.com")) == QCborValue(QCborKnownTags::Url, "https://example.com");
Beachten Sie, dass Qt-Typen wie QUrl und QDateTime ihre Argumente normalisieren und anderweitig modifizieren. Der obige Ausdruck ist nur wahr, weil die Zeichenkette auf der rechten Seite der normalisierte Wert ist, den die QCborValue auf der linken Seite annehmen würde. Wäre zum Beispiel der "https"-Teil auf beiden Seiten in Großbuchstaben, würde der Vergleich fehlschlagen. Informationen zu den von QCborValue durchgeführten Normalisierungen finden Sie in der Dokumentation des Konstruktors, der den betreffenden Qt-Typ verwendet.
Sortierreihenfolge
Die Sortierreihenfolge in CBOR ist in RFC 7049, Abschnitt 3.9 definiert, in dem die Sortierung von Schlüsseln in einer Map bei kanonischer Kodierung behandelt wird. Die Spezifikation besagt, dass "die Sortierung anhand der Bytes der Repräsentation der Schlüsseldatenelemente durchgeführt wird" und führt als Konsequenzen auf, dass:
- "Wenn zwei Schlüssel unterschiedliche Längen haben, wird der kürzere Schlüssel früher sortiert"
- "Wenn zwei Schlüssel die gleiche Länge haben, wird derjenige mit dem niedrigeren Wert in (byteweiser) lexikalischer Reihenfolge früher sortiert."
Dies führt zu einer überraschenden Sortierung von QCborValues, bei der das Ergebnis dieser Funktion ein anderes ist als das, das man später durch den Vergleich der enthaltenen Elemente erhalten würde. So wird z.B. der QCborValue mit der Zeichenkette "zzz" vor dem QCborValue mit der Zeichenkette "foobar" sortiert, obwohl beim Vergleich als QStrings oder QByteArrays das "zzz" nach "foobar" sortiert wird (Wörterbuchreihenfolge).
Die Spezifikation gibt nicht eindeutig an, welche Sortierreihenfolge für Werte unterschiedlichen Typs gelten soll (es heißt, die Sortierung solle "die 3/5-Bit-Aufteilung für Haupttypen nicht berücksichtigen"). QCborValue geht davon aus, dass auch Typen sortiert werden sollten. Die numerischen Werte der QCborValue::Type Aufzählung sind in dieser Reihenfolge, mit Ausnahme der erweiterten Typen, die wie ihre getaggten Äquivalente verglichen werden.
Hinweis: Die Sortierreihenfolge ist vorläufig und kann sich noch ändern. Anwendungen sollten sich vorerst nicht auf die von dieser Funktion zurückgegebene Reihenfolge verlassen.
Siehe auch QCborArray::compare(), QCborMap::compare(), und operator==().
[static]
QCborValue QCborValue::fromCbor(QCborStreamReader &reader)
Dekodiert ein Element aus dem CBOR-Stream in reader und gibt die entsprechende Darstellung zurück. Diese Funktion ist rekursiv: Wenn es sich bei dem Element um eine Map oder ein Array handelt, dekodiert sie alle in dieser Map oder diesem Array gefundenen Elemente, bis das äußerste Objekt fertig ist.
Diese Funktion muss nicht auf das Wurzelelement einer QCborStreamReader angewendet werden. Der folgende Code veranschaulicht zum Beispiel, wie das CBOR-Signatur-Tag am Anfang einer Datei übersprungen wird:
if (reader.isTag() && reader.toTag() == QCborKnownTags::Signature) reader.next(); QCborValue contents = QCborValue::fromCbor(reader);
Der zurückgegebene Wert kann teilweise vollständig und nicht von einer gültigen QCborValue zu unterscheiden sein, selbst wenn die Dekodierung fehlgeschlagen ist. Um festzustellen, ob ein Fehler aufgetreten ist, prüfen Sie, ob reader.lastError() eine Fehlerbedingung anzeigt. Diese Funktion bricht die Dekodierung sofort nach dem ersten Fehler ab.
Siehe auch toCbor(), toDiagnosticNotation(), toVariant(), und toJsonValue().
[static]
QCborValue QCborValue::fromCbor(const QByteArray &ba, QCborParserError *error = nullptr)
Dies ist eine überladene Funktion.
Dekodiert ein Element aus dem CBOR-Stream, das im Byte-Array ba gefunden wurde, und gibt die entsprechende Darstellung zurück. Diese Funktion ist rekursiv: Wenn das Element eine Karte oder ein Array ist, dekodiert sie alle Elemente, die in dieser Karte oder diesem Array gefunden werden, bis das äußerste Objekt fertig ist.
Diese Funktion speichert den Fehlerstatus, falls vorhanden, in dem Objekt, auf das error zeigt, zusammen mit dem Offset, wo der Fehler aufgetreten ist. Wenn kein Fehler aufgetreten ist, speichert sie NoError im Fehlerzustand und die Anzahl der Bytes, die sie verbraucht hat (d.h. sie speichert den Offset für das erste unbenutzte Byte). Anhand dieser Informationen ist es möglich, weitere Daten zu analysieren, die sich möglicherweise im selben Byte-Array befinden.
Der zurückgegebene Wert kann teilweise vollständig und nicht von einer gültigen QCborValue zu unterscheiden sein, selbst wenn die Dekodierung fehlgeschlagen ist. Um festzustellen, ob ein Fehler aufgetreten ist, prüfen Sie, ob ein Fehler in error gespeichert wurde. Diese Funktion bricht die Dekodierung sofort nach dem ersten Fehler ab.
Siehe auch toCbor(), toDiagnosticNotation(), toVariant(), und toJsonValue().
[static]
QCborValue QCborValue::fromJsonValue(const QJsonValue &v)
Konvertiert den in v enthaltenen JSON-Wert in den entsprechenden CBOR-Wert und gibt ihn zurück. Bei der Konvertierung von JSON in CBOR gibt es keinen Datenverlust, da der CBOR-Typensatz umfangreicher ist als der von JSON. Außerdem können Werte, die mit dieser Funktion in CBOR konvertiert wurden, mit toJsonValue() ohne Datenverlust wieder in JSON konvertiert werden.
In der folgenden Tabelle sind die Zuordnungen von JSON-Typen zu CBOR-Typen aufgeführt:
JSON-Typ | CBOR-Typ |
---|---|
Bool | Bool |
Zahl | Integer (wenn die Zahl keinen Bruch hat und im Bereich qint64 liegt) oder Double |
Zeichenfolge | Zeichenkette |
Array | Array |
Objekt | Karte |
Null | Null |
QJsonValue kann auch undefiniert sein, was auf eine vorherige Operation hinweist, die nicht abgeschlossen werden konnte (z. B. die Suche nach einem Schlüssel, der in einem Objekt nicht vorhanden ist). Undefinierte Werte sind keine JSON-Typen und dürfen nicht in JSON-Arrays und -Objekten vorkommen, aber diese Funktion gibt den QCborValue undefined value zurück, wenn der entsprechende QJsonValue undefined ist.
Siehe auch toJsonValue(), fromVariant(), QCborArray::fromJsonArray(), und QCborMap::fromJsonObject().
[static]
QCborValue QCborValue::fromVariant(const QVariant &variant)
Konvertiert die QVariant variant in QCborValue und gibt sie zurück.
QVariants kann eine lange Liste von verschiedenen Metatypen enthalten, von denen viele keine entsprechende Darstellung in CBOR haben. Dazu gehören auch alle benutzerdefinierten Metatypen. Bei der Vorbereitung der Übertragung mit CBOR wird empfohlen, jeden Wert sorgfältig zu kodieren, um den Verlust der Darstellung zu vermeiden.
In der folgenden Tabelle sind die Konvertierungen aufgelistet, die diese Funktion vornimmt:
Qt (C++) Typ | CBOR-Typ |
---|---|
ungültig (QVariant()) | Undefiniert |
bool | Bool |
std::nullptr_t | Null |
short , ushort , int , uint , qint64 | Ganzzahl |
quint64 | Integer, oder Double, wenn außerhalb des Bereichs von qint64 |
float , double | Double |
QByteArray | ByteArray |
QDateTime | DateTime |
QCborSimpleType | Einfacher Typ |
QJsonArray | Array, konvertiert mit QCborArray::formJsonArray() |
QJsonDocument | Array oder Karte |
QJsonObject | Map, konvertiert mit QCborMap::fromJsonObject() |
QJsonValue | konvertiert mit fromJsonValue() |
QRegularExpression | RegularExpression |
QString | Zeichenkette |
QStringList | Array |
QVariantHash | Karte |
QVariantList | Array |
QVariantMap | Karte |
QUrl | Url |
QUuid | Uuid |
Wenn QVariant::isNull() den Wert true zurückgibt, wird eine Null QCborValue zurückgegeben oder in die Liste oder das Objekt eingefügt, unabhängig von dem Typ, der von QVariant übertragen wird. Beachten Sie, dass die Verhaltensänderung in Qt 6.0, die QVariant::isNull() betrifft, auch diese Funktion betrifft.
Für andere Typen, die oben nicht aufgeführt sind, wird eine Konvertierung in String versucht, normalerweise, aber nicht immer, durch den Aufruf von QVariant::toString(). Wenn die Konvertierung fehlschlägt, wird der Wert durch einen Undefined CBOR-Wert ersetzt. Beachten Sie, dass QVariant::toString() für die meisten Typen ebenfalls verlustbehaftet ist.
Bitte beachten Sie, dass die Konvertierungen über QVariant::toString() jederzeit geändert werden können. Sowohl QVariant als auch QCborValue können in Zukunft erweitert werden, um mehr Typen zu unterstützen, was zu einer Änderung der Art und Weise führen wird, wie diese Funktion Konvertierungen durchführt.
Siehe auch toVariant(), fromJsonValue(), QCborArray::toVariantList(), QCborMap::toVariantMap(), und QJsonValue::fromVariant().
bool QCborValue::isArray() const
Gibt true zurück, wenn diese QCborValue vom Typ Array ist. Der Array-Wert kann mit toArray() abgerufen werden.
Siehe auch type() und toArray().
bool QCborValue::isBool() const
Gibt true zurück, wenn diese QCborValue ein Boolean ist. Der Wert kann mit toBool() abgefragt werden.
Siehe auch type(), toBool(), isTrue(), und isFalse().
bool QCborValue::isByteArray() const
Gibt true zurück, wenn diese QCborValue vom Typ Byte-Array ist. Der Wert des Byte-Arrays kann mit toByteArray() abgefragt werden.
Siehe auch type() und toByteArray().
bool QCborValue::isContainer() const
Diese Komfortfunktion gibt true zurück, wenn QCborValue entweder ein Array oder eine Map ist.
Siehe auch isArray() und isMap().
bool QCborValue::isDateTime() const
Gibt true zurück, wenn diese QCborValue vom Typ Datum/Uhrzeit ist. Der Wert kann mit toDateTime() abgerufen werden. Datum/Uhrzeit sind erweiterte Typen, die das Tag DateTime verwenden.
Bei der Dekodierung aus einem CBOR-Stream interpretiert QCborValue außerdem Tags mit dem Wert UnixTime_t und konvertiert sie in den entsprechenden Datums-/Zeitwert.
Siehe auch type() und toDateTime().
bool QCborValue::isDouble() const
Gibt true zurück, wenn diese QCborValue vom Typ Fließkomma ist. Der Wert kann mit toDouble() abgefragt werden.
Siehe auch type() und toDouble().
bool QCborValue::isFalse() const
Gibt true zurück, wenn diese QCborValue ein Boolean mit false-Wert ist. Diese Funktion existiert, weil CBOR-Boleans intern als zwei separate Typen gespeichert werden, einer für true und einer für false.
Siehe auch type(), isBool(), isTrue(), und toBool().
bool QCborValue::isInteger() const
Gibt true zurück, wenn diese QCborValue vom Typ Integer ist. Der Integer-Wert kann mit toInteger() abgefragt werden.
Siehe auch type() und toInteger().
bool QCborValue::isInvalid() const
Gibt true zurück, wenn diese QCborValue keinen gültigen Typ hat. Ungültige QCborValues unterscheiden sich von solchen mit undefinierten Werten und stellen normalerweise einen Dekodierungsfehler dar.
Siehe auch isUndefined() und isNull().
bool QCborValue::isMap() const
Gibt true zurück, wenn diese QCborValue vom Typ map ist. Der Map-Wert kann mit toMap() abgerufen werden.
Siehe auch type() und toMap().
bool QCborValue::isNull() const
Gibt true zurück, wenn diese QCborValue vom Typ null ist.
CBOR-Nullwerte werden verwendet, um optionale Werte anzuzeigen, die nicht bereitgestellt wurden. Sie unterscheiden sich von undefinierten Werten dadurch, dass Nullwerte normalerweise nicht das Ergebnis eines früheren Fehlers oder Problems sind.
Nullwerte unterscheiden sich von undefinierten Werten und von ungültigen QCborValue Objekten. Die API erstellt keine ungültigen QCborValues, aber sie können als Ergebnis eines Parsing-Fehlers existieren.
Siehe auch type(), isUndefined(), und isInvalid().
bool QCborValue::isRegularExpression() const
Gibt true zurück, wenn diese QCborValue das Muster eines regulären Ausdrucks enthält. Das Muster kann mit toRegularExpression() abgerufen werden.
Siehe auch type() und toRegularExpression().
bool QCborValue::isSimpleType() const
Gibt true zurück, wenn diese QCborValue zu einem der einfachen CBOR-Typen gehört. Der Typ selbst kann später mit type() abgefragt werden, auch für Typen, die keine Aufzählung in der API haben. Sie können auch mit der Überladung isSimpleType(QCborSimpleType) überprüft werden.
Siehe auch QCborSimpleType, isSimpleType(QCborSimpleType), und toSimpleType().
bool QCborValue::isSimpleType(QCborSimpleType st) const
Dies ist eine überladene Funktion.
Gibt true zurück, wenn diese QCborValue von einem einfachen Typ ist und toSimpleType() st zurückgeben würde, andernfalls false. Mit dieser Funktion kann jeder einfache CBOR-Typ geprüft werden, auch solche, für die es in der API keine Aufzählung gibt. Zum Beispiel könnte man für den einfachen Typ des Wertes 12 schreiben:
value.isSimpleType(QCborSimpleType(12));
Siehe auch QCborValue::QCborValue(QCborSimpleType), isSimpleType(), isFalse(), isTrue(), isNull, isUndefined(), und toSimpleType().
bool QCborValue::isString() const
Gibt true zurück, wenn diese QCborValue vom Typ String ist. Der String-Wert kann mit toString() abgefragt werden.
Siehe auch type() und toString().
bool QCborValue::isTag() const
Gibt true zurück, wenn diese QCborValue vom Typ Tag ist. Der Tag-Wert kann mit tag() abgefragt werden und der getaggte Wert mit taggedValue().
Diese Funktion gibt auch true für erweiterte Typen zurück, die von der API erkannt werden. Für Code, der erweiterte Typen direkt verarbeitet, bevor die Qt-API aktualisiert wird, um sie zu unterstützen, ist es möglich, das Tag + Tagged Value Paar mit taggedValue() neu zu erstellen.
Siehe auch type(), tag(), taggedValue(), und taggedValue().
bool QCborValue::isTrue() const
Gibt true zurück, wenn diese QCborValue ein Boolean mit true-Wert ist. Diese Funktion existiert, weil CBOR-Boleans intern als zwei separate Typen gespeichert werden, einer für false und einer für true.
Siehe auch type(), isBool(), isFalse(), und toBool().
bool QCborValue::isUndefined() const
Gibt true zurück, wenn diese QCborValue vom undefinierten Typ ist.
Nicht definierte CBOR-Werte werden verwendet, um auf fehlende Informationen hinzuweisen, in der Regel als Ergebnis einer früheren Operation, die nicht wie erwartet abgeschlossen wurde. Sie werden auch von den APIs QCborArray und QCborMap verwendet, um anzuzeigen, dass das gesuchte Element nicht gefunden wurde.
Undefinierte Werte unterscheiden sich von Nullwerten.
QCborValue Objekte mit undefinierten Werten unterscheiden sich auch von ungültigen QCborValue Objekten. Die API erstellt keine ungültigen QCborValues, aber sie können als Ergebnis eines Parsing-Fehlers existieren.
Siehe auch type(), isNull(), und isInvalid().
bool QCborValue::isUrl() const
Gibt true zurück, wenn diese QCborValue vom Typ URL ist. Der URL-Wert kann mit toUrl() abgerufen werden.
Siehe auch type() und toUrl().
bool QCborValue::isUuid() const
Gibt true zurück, wenn diese QCborValue eine UUID enthält. Der Wert kann mit toUuid() abgerufen werden.
Siehe auch type() und toUuid().
[noexcept]
void QCborValue::swap(QCborValue &other)
Tauscht diesen Wert mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
QCborTag QCborValue::tag(QCborTag defaultValue = QCborTag(-1)) const
Gibt den Tag dieses erweiterten QCborValue Objekts zurück, wenn es vom Typ Tag ist, andernfalls defaultValue.
CBOR stellt erweiterte Typen dar, indem es eine Zahl (das Tag) mit einer gespeicherten Darstellung verknüpft. Diese Funktion gibt diese Nummer zurück. Um die Darstellung abzurufen, verwenden Sie taggedValue().
Siehe auch isTag(), taggedValue(), isDateTime(), isUrl(), isRegularExpression(), und isUuid().
QCborValue QCborValue::taggedValue(const QCborValue &defaultValue = QCborValue()) const
Gibt den getaggten Wert dieses erweiterten QCborValue Objekts zurück, wenn es vom Typ Tag ist, andernfalls defaultValue.
CBOR stellt erweiterte Typen dar, indem es eine Zahl (das Tag) mit einer gespeicherten Darstellung verknüpft. Diese Funktion gibt diese Darstellung zurück. Um das Tag abzurufen, verwenden Sie tag().
Siehe auch isTag(), tag(), isDateTime(), isUrl(), isRegularExpression(), und isUuid().
bool QCborValue::toBool(bool defaultValue = false) const
Gibt den booleschen Wert zurück, der in diesem QCborValue gespeichert ist, wenn er vom Typ boolesch ist. Andernfalls gibt es defaultValue zurück.
Siehe auch isBool(), isTrue(), und isFalse().
QByteArray QCborValue::toByteArray(const QByteArray &defaultValue = {}) const
Gibt den in diesem QCborValue gespeicherten Byte-Array-Wert zurück, wenn er vom Typ Byte-Array ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QByteArray durchführt.
Siehe auch isByteArray(), isString(), und toString().
QByteArray QCborValue::toCbor(QCborValue::EncodingOptions opt = NoTransformation) const
Kodiert dieses QCborValue Objekt in seine CBOR-Darstellung, unter Verwendung der in opt angegebenen Optionen, und gibt das Byte-Array zurück, das diese Darstellung enthält.
Diese Funktion schlägt nicht fehl, es sei denn, diese QCborValue oder eines der enthaltenen Elemente, wenn es sich um eine Map oder ein Array handelt, sind ungültig. Ungültige Typen werden normalerweise nicht von der API erzeugt, können aber aus Dekodierungsfehlern resultieren.
Standardmäßig führt diese Funktion keine Transformation der Werte in QCborValue durch und schreibt alle Fließkommazahlen direkt als Double-Precision-Typen (double
). Wenn die Option UseFloat angegeben ist, verwendet sie einfache Genauigkeit (float
) für alle Fließkommazahlen, bei denen kein Präzisionsverlust durch die Verwendung dieser Darstellung entsteht. Das schließt Unendlichkeiten und NaN-Werte ein.
Wenn UseFloat16 angegeben ist, versucht die Funktion, halbgenaue Fließkommazahlen (qfloat16
) zu verwenden, wenn die Umwandlung in diese Darstellung keinen Präzisionsverlust zur Folge hat. Dies gilt immer für Unendlichkeiten und NaN.
Wenn UseIntegers angegeben ist, werden Ganzzahlen für jeden Fließkommawert verwendet, der eine echte Ganzzahl enthält.
Siehe auch fromCbor(), fromVariant(), und fromJsonValue().
void QCborValue::toCbor(QCborStreamWriter &writer, QCborValue::EncodingOptions opt = NoTransformation) const
Dies ist eine überladene Funktion.
Kodiert dieses QCborValue Objekt in seine CBOR Repräsentation, unter Verwendung der in opt angegebenen Optionen, an den durch writer angegebenen Writer. Derselbe Writer kann von mehreren QCborValues verwendet werden, zum Beispiel um verschiedene Elemente in einem größeren Array zu kodieren.
Diese Funktion schlägt nicht fehl, es sei denn, diese QCborValue oder eines der enthaltenen Elemente, wenn es sich um eine Map oder ein Array handelt, sind ungültig. Ungültige Typen werden normalerweise nicht von der API erzeugt, können aber aus Dekodierungsfehlern resultieren.
Standardmäßig führt diese Funktion keine Transformation der Werte in QCborValue durch und schreibt alle Fließkommazahlen direkt als Double-Precision-Typen (binary64). Wenn die Option UseFloat angegeben ist, verwendet sie einfache Präzision (binary32) für alle Fließkommazahlen, bei denen kein Präzisionsverlust durch die Verwendung dieser Darstellung entsteht. Das schließt Unendlichkeiten und NaN-Werte ein.
Wenn die Option UseFloat16 angegeben ist, versucht die Funktion, halbgenaue Fließkommazahlen (binary16) zu verwenden, wenn die Konvertierung in diese Darstellung keine Präzisionsverluste mit sich bringt. Dies gilt immer für Unendlichkeiten und NaN.
Wenn UseIntegers angegeben ist, werden Ganzzahlen für jeden Fließkommawert verwendet, der eine echte Ganzzahl enthält.
Siehe auch fromCbor(), fromVariant(), und fromJsonValue().
QDateTime QCborValue::toDateTime(const QDateTime &defaultValue = {}) const
Gibt den in diesem QCborValue gespeicherten Datums-/Zeitwert zurück, wenn er vom erweiterten Typ Datum/Zeit ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QDateTime durchführt.
Siehe auch isDateTime(), isTag(), und taggedValue().
QString QCborValue::toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opts = Compact) const
Erstellt das Diagnose-Notationsäquivalent dieses CBOR-Objekts und gibt es zurück. Der Parameter opts steuert den Dialekt der Notation. Die Diagnosenotation ist bei der Fehlersuche nützlich, um dem Entwickler zu helfen, zu verstehen, welcher Wert in QCborValue oder in einem CBOR-Stream gespeichert ist. Aus diesem Grund bietet die Qt-API keine Unterstützung für das Parsen der Diagnose zurück in das In-Memory-Format oder den CBOR-Stream, obwohl die Darstellung eindeutig ist und dies möglich wäre.
Die CBOR-Diagnoseschreibweise wird durch Abschnitt 6 von RFC 7049 spezifiziert. Es handelt sich um eine Textdarstellung des CBOR-Datenstroms, die JSON sehr ähnlich ist, aber die CBOR-Typen unterstützt, die in JSON nicht vorkommen. Das erweiterte Format, das durch das ExtendedFormat -Flag aktiviert wird, befindet sich derzeit in einigen IETF-Entwürfen und sein Format kann sich noch ändern.
Diese Funktion erzeugt die äquivalente Darstellung des Datenstroms, die toCbor() erzeugen würde, ohne dass dort eine Transformationsoption bereitgestellt wird. Das bedeutet auch, dass diese Funktion möglicherweise keine Darstellung des Datenstroms erzeugt, der zur Erstellung des Objekts verwendet wurde, wenn es mit fromCbor() erstellt wurde, da diese Funktion möglicherweise Transformationen angewendet hat. Eine originalgetreue Notation eines Datenstroms ohne Transformation finden Sie im Beispiel cbordump
.
Siehe auch toCbor() und QJsonDocument::toJson().
double QCborValue::toDouble(double defaultValue = 0) const
Gibt den in dieser QCborValue gespeicherten Fließkommawert zurück, wenn er vom Typ Double ist. Ist er vom Typ Integer, gibt diese Funktion den in Double umgewandelten Integer-Wert zurück. In allen anderen Fällen gibt sie defaultValue zurück.
Siehe auch isDouble(), isInteger(), und toInteger().
qint64 QCborValue::toInteger(qint64 defaultValue = 0) const
Gibt den Ganzzahlwert zurück, der in diesem QCborValue gespeichert ist, wenn er vom Typ Ganzzahl ist. Handelt es sich um den Typ Double, gibt diese Funktion den in eine Ganzzahl konvertierten Fließkommawert zurück. In allen anderen Fällen gibt sie defaultValue zurück.
Siehe auch isInteger(), isDouble(), und toDouble().
QJsonValue QCborValue::toJsonValue() const
Konvertiert dieses QCborValue Objekt in eine entsprechende Darstellung in JSON und gibt es als QJsonValue zurück.
Bitte beachten Sie, dass CBOR einen umfangreicheren und breiteren Typensatz als JSON enthält, so dass einige Informationen bei dieser Konvertierung verloren gehen können. Die folgende Tabelle vergleicht CBOR-Typen mit JSON-Typen und gibt an, ob Informationen verloren gehen können oder nicht.
CBOR-Typ | JSON-Typ | Kommentare |
---|---|---|
Bool | Bool | Kein Datenverlust möglich |
Doppelt | Zahl | Unendliche Zahlen und NaN werden in Null umgewandelt; kein Datenverlust bei anderen Werten |
Ganzzahl | Zahl | Datenverlust bei der Umwandlung möglich, wenn die Ganzzahl größer als253 oder kleiner als -253 ist. |
Null | Null | Kein Datenverlust möglich |
Undefiniert | Null | Typinformation verloren |
Zeichenfolge | Zeichenfolge | Kein Datenverlust möglich |
Byte-Array | Zeichenkette | Konvertiert in eine verlustfreie Kodierung wie Base64url, aber die Unterscheidung zwischen Strings und Byte-Arrays geht verloren |
Andere einfache Typen | Zeichenkette | Typinformationen gehen verloren |
Array | Array | Konvertierung gilt für jeden enthaltenen Wert |
Karte | Objekt | Schlüssel werden in Strings umgewandelt; Werte werden gemäß dieser Tabelle umgewandelt |
Tags und erweiterte Typen | Speziell | Die Tag-Nummer selbst geht verloren und der Tag-Wert wird in JSON umgewandelt |
Informationen über die Konvertierung von CBOR-Map-Schlüsseln in Strings finden Sie unter QCborMap::toJsonObject().
Wenn diese QCborValue den undefinierten Wert enthält, gibt diese Funktion auch einen undefinierten QJsonValue zurück. Beachten Sie, dass JSON keine undefinierten Werte unterstützt und undefinierte QJsonValues eine Erweiterung der Spezifikation sind. Sie können nicht in einem QJsonArray oder QJsonObject gespeichert werden, können aber von Funktionen zurückgegeben werden, um einen Fehler anzuzeigen. Für alle anderen Zwecke sind sie dasselbe wie null.
Besondere Behandlung von Tags und erweiterten Typen
Einige Tags werden speziell behandelt und ändern die Transformation des getaggten Wertes von CBOR zu JSON. In der folgenden Tabelle sind diese Sonderfälle aufgeführt:
Tag | CBOR-Typ | Umwandlung |
---|---|---|
ExpectedBase64url | Byte-Array | Kodiert das Byte-Array als Base64url |
ExpectedBase64 | Byte-Array | Kodiert das Byte-Array als Base64 |
ExpectedBase16 | Byte-Array | Kodiert das Byte-Array als Hex |
Url | Url und String | Verwendet QUrl::toEncoded(), um die Kodierung in das vollständig kodierte Format der URL zu normalisieren |
Uuid | Uuid und Byte-Array | Verwendet QUuid::toString(), um die String-Darstellung zu erstellen. |
Siehe auch fromJsonValue(), toVariant(), QCborArray::toJsonArray(), und QCborMap::toJsonObject().
QRegularExpression QCborValue::toRegularExpression(const QRegularExpression &defaultValue = {}) const
Gibt den Wert des regulären Ausdrucks zurück, der in diesem QCborValue gespeichert ist, wenn er vom erweiterten Typ des regulären Ausdrucksmusters ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QRegularExpression durchführt.
Siehe auch isRegularExpression(), isTag(), und taggedValue().
QCborSimpleType QCborValue::toSimpleType(QCborSimpleType defaultValue = QCborSimpleType::Undefined) const
Gibt den einfachen Typ von QCborValue zurück, wenn es sich um einen einfachen Typ handelt. Wenn es kein einfacher Typ ist, wird defaultValue zurückgegeben.
Die folgenden Typen sind einfache Typen und diese Funktion gibt die aufgeführten Werte zurück:
QCborValue::False | QCborSimpleType::False |
QCborValue::True | QCborSimpleType::True |
QCborValue::Null | QCborSimpleType::Null |
QCborValue::Undefined | QCborSimpleType::Undefined |
Siehe auch type(), isSimpleType(), isBool(), isTrue(), isFalse(), isTrue(), isNull(), und isUndefined().
QString QCborValue::toString(const QString &defaultValue = {}) const
Gibt den in diesem QCborValue gespeicherten String-Wert zurück, wenn er vom Typ String ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QString durchführt.
Siehe auch isString(), isByteArray(), und toByteArray().
QUrl QCborValue::toUrl(const QUrl &defaultValue = {}) const
Gibt den in diesem QCborValue gespeicherten URL-Wert zurück, wenn er vom erweiterten Typ URL ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QUrl durchführt.
Siehe auch isUrl(), isTag(), und taggedValue().
QUuid QCborValue::toUuid(const QUuid &defaultValue = {}) const
Gibt den in dieser QCborValue gespeicherten UUID-Wert zurück, wenn er vom erweiterten Typ UUID ist. Andernfalls gibt sie defaultValue zurück.
Beachten Sie, dass diese Funktion keine Konvertierung von anderen Typen nach QUuid durchführt.
Siehe auch isUuid(), isTag(), und taggedValue().
QVariant QCborValue::toVariant() const
Konvertiert diesen Wert in einen nativen Qt-Typ und gibt den entsprechenden QVariant zurück.
In der folgenden Tabelle sind die Zuordnungen zwischen QCborValue types und Qt meta types aufgeführt.
CBOR-Typ | Qt- oder C++-Typ | Hinweise |
---|---|---|
Ganzzahl | qint64 | |
Doppelt | double | |
Bool | bool | |
Null | std::nullptr_t | |
Undefiniert | kein Typ (QVariant()) | |
Byte-Array | QByteArray | |
Zeichenkette | QString | |
Array | QVariantList | Rekursiv konvertiert alle Werte |
Karte | QVariantMap | Schlüsseltypen werden "stringifiziert" |
Andere einfache Typen | QCborSimpleType | |
DateTime | QDateTime | |
Url | QUrl | |
RegularExpression | QRegularExpression | |
Uuid | QUuid | |
Andere Tags | Besondere | Das Tag wird ignoriert und der getaggte Wert wird mit dieser Funktion konvertiert |
Beachten Sie, dass Werte in CBOR Maps und Arrays ebenfalls mit dieser Funktion rekursiv konvertiert und stattdessen in QVariantMap und QVariantList gespeichert werden. Sie werden QCborMap und QCborArray nicht innerhalb der QVarianten finden.
QVariantMaps haben im Gegensatz zu CBOR String-Schlüssel, so dass die Umwandlung einer QCborMap in QVariantMap einen Schritt der "Stringifizierung" der Schlüsselwerte impliziert. Siehe QCborMap::toJsonObject() für Details.
Siehe auch fromVariant(), toJsonValue(), QCborArray::toVariantList(), und QCborMap::toVariantMap().
QCborValue::Type QCborValue::type() const
Gibt den Typ dieses QCborValue zurück. Der Typ kann auch später mit einer der "isXxx"-Funktionen abgefragt werden.
Siehe auch isInteger(), isByteArray(), isString(), isArray(), isMap(), isTag(), isFalse(), isTrue(), isBool(), isNull(), isUndefined, isDouble(), isDateTime(), isUrl(), isRegularExpression(), und isUuid().
[noexcept]
QCborValue &QCborValue::operator=(const QCborValue &other)
Ersetzt den Inhalt dieses QCborObjects durch eine Kopie von other.
[noexcept]
QCborValue &QCborValue::operator=(QCborValue &&other)
Dies ist eine überladene Funktion.
Verschiebt den Inhalt des Objekts other QCborValue in dieses Objekt und gibt die Ressourcen dieses Objekts frei. Gibt einen Verweis auf dieses Objekt zurück.
QCborValueRef QCborValue::operator[](const QString &key)
Gibt eine QCborValueRef zurück, die verwendet werden kann, um den Eintrag in dieser Map mit der angegebenen key zu lesen oder zu ändern. Wenn diese QCborValue eine QCborMap ist, ist diese Funktion äquivalent zum passenden Operator[] auf dieser Map.
Vor der Rückgabe des Verweises: wenn QCborValue ein Array war, wird es zuerst in eine Map umgewandelt (so dass map[i]
für jeden Index array[i]
ist, i
, mit gültigem array[i]
); andernfalls, wenn es keine Map war, wird es mit einer leeren Map überschrieben.
Siehe auch operator[](qint64), QCborMap::operator[], QCborMap::value(), und QCborMap::find().
const QCborValue QCborValue::operator[](const QString &key) const
Wenn dieses QCborValue ein QCborMap ist, sucht es in den Elementen nach dem Wert, dessen Schlüssel mit key übereinstimmt. Wenn es in der Map keinen Schlüssel gibt, der key entspricht, oder wenn dieses QCborValue Objekt keine Map ist, wird der undefinierte Wert zurückgegeben.
Diese Funktion ist äquivalent zu:
value.toMap().value(key);
Siehe auch operator[](qint64), QCborMap::operator[], QCborMap::value(), und QCborMap::find().
QCborValueRef QCborValue::operator[](QLatin1StringView key)
Dies ist eine überladene Funktion.
Gibt eine QCborValueRef zurück, die zum Lesen oder Ändern des Eintrags in dieser Map mit der angegebenen key verwendet werden kann. Wenn diese QCborValue eine QCborMap ist, ist diese Funktion äquivalent zum passenden Operator[] auf dieser Map.
Vor der Rückgabe des Verweises: wenn QCborValue ein Array war, wird es zuerst in eine Map umgewandelt (so dass map[i]
für jeden Index array[i]
ist, i
, mit gültigem array[i]
); andernfalls, wenn es keine Map war, wird es mit einer leeren Map überschrieben.
Siehe auch operator[](qint64), QCborMap::operator[], QCborMap::value(), und QCborMap::find().
QCborValueRef QCborValue::operator[](qint64 key)
Dies ist eine überladene Funktion.
Gibt eine QCborValueRef zurück, die verwendet werden kann, um den Eintrag in this als Map oder Array mit dem angegebenen key zu lesen oder zu ändern. Wenn diese QCborValue eine QCborMap oder, für 0 <= Schlüssel < 0x10000, eine QCborArray ist, ist diese Funktion äquivalent zum passenden Operator[] auf dieser Map oder diesem Array.
Vor der Rückgabe des Verweises: wenn QCborValue ein Array war, aber der Schlüssel außerhalb des Bereichs liegt, wird das Array zunächst in eine Map umgewandelt (so dass map[i]
für jeden Index array[i]
ist, i
, mit gültigem array[i]
); andernfalls, wenn es keine Map war, wird es mit einer leeren Map überschrieben.
Siehe auch operator[], QCborMap::operator[], QCborMap::value(), QCborMap::find(), QCborArray::operator[], und QCborArray::at().
const QCborValue QCborValue::operator[](QLatin1StringView key) const
Dies ist eine überladene Funktion.
Wenn dieses QCborValue ein QCborMap ist, sucht es in den Elementen nach dem Wert, dessen Schlüssel mit key übereinstimmt. Wenn es in der Map keinen Schlüssel gibt, der key entspricht, oder wenn dieses QCborValue Objekt keine Map ist, wird der undefinierte Wert zurückgegeben.
Diese Funktion ist äquivalent zu:
value.toMap().value(key);
Siehe auch operator[](qint64), QCborMap::operator[], QCborMap::value(), und QCborMap::find().
const QCborValue QCborValue::operator[](qint64 key) const
Dies ist eine überladene Funktion.
Wenn dies QCborValue ein QCborMap ist, sucht sie nach Elementen, deren Schlüssel mit key übereinstimmt. Wenn dies ein QCborArray ist, wird das Element zurückgegeben, dessen Index key ist. Wenn es keinen übereinstimmenden Wert in dem Array oder der Map gibt oder wenn dieses QCborValue Objekt kein Array oder keine Map ist, wird der undefinierte Wert zurückgegeben.
Siehe auch operator[], QCborMap::operator[], QCborMap::value(), QCborMap::find(), QCborArray::operator[], und QCborArray::at().
Verwandte Nicht-Mitglieder
[noexcept]
bool operator!=(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs und gibt true zurück, wenn sich die Inhalte unterscheiden, andernfalls false. Wenn jedes QCborValue ein Array oder eine Map enthält, ist der Vergleich rekursiv zu den darin enthaltenen Elementen.
Für weitere Informationen über CBOR-Gleichheit in Qt siehe QCborValue::compare().
Siehe auch compare(), QCborValue::operator==(), QCborMap::operator==(), operator==(), und operator<().
[noexcept]
bool operator<(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs und gibt true zurück, wenn lhs vor rhs sortiert werden soll, sonst false. Wenn jedes QCborValue ein Array oder eine Map enthält, erfolgt der Vergleich rekursiv auf die darin enthaltenen Elemente.
Für weitere Informationen über die CBOR-Sortierreihenfolge siehe QCborValue::compare().
Siehe auch compare(), QCborValue::operator==(), QCborMap::operator==(), operator==(), und operator!=().
[noexcept]
bool operator<=(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs, und gibt true zurück, wenn lhs vor rhs sortiert werden sollte oder gleich rhs ist, andernfalls false. Wenn jedes QCborValue ein Array oder eine Map enthält, erfolgt der Vergleich rekursiv über die darin enthaltenen Elemente.
Weitere Informationen zur CBOR-Sortierreihenfolge finden Sie unter QCborValue::compare().
Siehe auch compare(), QCborValue::operator<(), QCborMap::operator==(), operator==(), und operator!=().
[noexcept]
bool operator==(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs und gibt true zurück, wenn sie den gleichen Inhalt haben, andernfalls false. Wenn jedes QCborValue ein Array oder eine Map enthält, ist der Vergleich rekursiv zu den darin enthaltenen Elementen.
Für weitere Informationen über CBOR-Gleichheit in Qt siehe compare().
Siehe auch compare(), QCborValue::operator==(), QCborMap::operator==(), operator!=(), und operator<().
[noexcept]
bool operator>(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs und gibt true zurück, wenn lhs nach rhs sortiert werden soll, sonst false. Wenn jedes QCborValue ein Array oder eine Map enthält, erfolgt der Vergleich rekursiv auf die darin enthaltenen Elemente.
Für weitere Informationen über die CBOR-Sortierreihenfolge siehe QCborValue::compare().
Siehe auch compare(), QCborValue::operator>=(), QCborMap::operator==(), operator==(), und operator!=().
[noexcept]
bool operator>=(const QCborValue &lhs, const QCborValue &rhs)
Vergleicht lhs und rhs, und gibt true zurück, wenn lhs nach rhs sortiert werden sollte oder gleich rhs ist, andernfalls false. Wenn jedes QCborValue ein Array oder eine Map enthält, erfolgt der Vergleich rekursiv über die darin enthaltenen Elemente.
Weitere Informationen zur CBOR-Sortierreihenfolge finden Sie unter QCborValue::compare().
Siehe auch compare(), QCborValue::operator>(), QCborMap::operator==(), operator==(), und operator!=().
© 2025 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.