Gibt es eine einfache Möglichkeit, mit der Klasse QVariant mit hexadezimal-strings?
Diesem code-Beispiel funktioniert wie ich es erwarten würde:
v = QVariant("123456");
qDebug() << v; //QVariant(QString, "123456")
v.convert(QVariant::Int);
qDebug() << v; //QVariant(int, 123456)
v.convert(QVariant::String);
qDebug() << v; //QVariant(QString, "123456")
Wo, wie dies nicht:
v = QVariant("0xBEEF");
qDebug() << v; //QVariant(QString, "0xBEEF")
v.convert(QVariant::Int);
qDebug() << v; //QVariant(int, 0)
v.convert(QVariant::String);
qDebug() << v; //QVariant(QString, "")
Gibt es eine einfache Möglichkeit, um die Klasse QVariant Arbeit mit hexadezimal-strings, so das zweite Beispiel würde funktionieren, so etwas wie dieses:
v = QVariant("0xBEEF");
qDebug() << v; //QVariant(QString, "0xBEEF")
v.convert(QVariant::Int);
qDebug() << v; //QVariant(int, 48879)
v.convert(QVariant::String);
qDebug() << v; //QVariant(QString, "48879")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim konvertieren einer qvariant zu einem numerischen Wert, den Sie angeben müssen, die Basis. Auch stellen Sie sicher, dass der Wert passt in int/long/longlong oder dann ist die Konvertierung schlägt fehl, für, dass Grund statt.
erzeugt die korrekte Ausgabe
während
Ausgabe
"1" == 1
, aber nicht in"m1stake"
). Ich war der Hoffnung, dass es die gleiche Art von Versuch für einen hex-string gespeichert, in C++ - notation (d.h."a" == 10
im"0xa"
aber nicht in"di0xan"
). QVariant anscheinend nicht die Mühe machen einen solchen Versuch (basierend auf dem Ergebnis meiner"0xBEEF"
Beispiel).Nachdem die Punkte aus, indem diese Antwort zu numerischen überlauf, ich habe einige der Untersuchung, und es scheint die QVariant die Konvertierungs-Routinen fehlerhaft sind. Den einfachsten Weg, um zu konvertieren eine QVariant sicher ist durch die Verwendung von QString s Umbauten statt. Auch dies scheint, wie die einfachste Art und Weise zu verwenden, QVariant mit hexadezimal-strings. Ich habe zusammengefasst meine Erkenntnisse unten. Die Kommentare wäre die Ausgabe von anrufen zu
qDebug() << v;
an diesem Punkt im code.Szenario 1: gespeicherte Rufnummer als hexadezimal-string
Der einfachste und sicherste Weg, um die Konvertierung von string-die-steht-ein-dezimal-Zahl in eine Zahl geben, ist die Verwendung QString s
toInt(bool * ok = 0, int base = 10)
Methode.Szenario 2: Anzahl, werden als dezimal-string
QVariant ist
convert(Type t)
Methode funktioniert wie man es erwarten würde in diesem Szenario.Jedoch mit der gleichen Methode, wenn der string eine Zahl enthält, die zu groß für den Datentyp bewirkt, dass ein silent-überlauf, statt etwas zu tun, die mehr nützlich, wie die Rückgabe von false und Einstellung der QVariant zu 0.
Durch die Verwendung der gleichen Methode wie in Szenario 1 kann man verhindern, dass dies geschieht, und auch das optionale
*bool
parameter dertoInt()
werden, alarmiert der Ausfälle.