Wie kann ich analysieren diese "\"
getrennt HEX-Werte in der QByteArray
in 8 separate int ist?Separate QByteArray Hex-Werte des trennen int
QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1;
int num2;
int num3;
...
Wie kann ich analysieren diese "\"
getrennt HEX-Werte in der QByteArray
in 8 separate int ist?Separate QByteArray Hex-Werte des trennen int
QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1;
int num2;
int num3;
...
Die \x
escape sequence stellt einen hexadezimalen Wert innerhalb Stringliterale und Zeichenliterale. Die beiden Hexadezimalziffern nach \x
werden als einzelnes Byte analysiert. Zum Beispiel:
QByteArray foo1 = "\x46\x6f\x6f";
QByteArray foo2 = "Foo";
Q_ASSERT(foo1 == foo2); // 'foo1' and 'foo2' are equal
Wenn Sie die hexadezimal dargestellten Werte in Ihrem mainArray
zugreifen möchten, verwenden Sie einfach die QByteArray::at
oder die subscript operator wie folgt:
QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1 = mainArray[0]; // 0xFF
int num2 = mainArray[1]; // 0xFF
int num3 = mainArray[2]; // 0x01
// ...
Eine Sache im Auge zu behalten, den Werttyp von QByteArray
ist char
, die ein signierter Typ ist daher die \xFF
auf den meisten Systemen werden -1
insead von 255
sein. Um das erwähnte Problem zu beheben, ist hier eine mögliche Lösung:
QByteArray mainArray = "\xFF\xFF\x01\x04\x01\x0B\x03\xEC";
int num1 = 0xff & mainArray[0];
int num2 = 0xff & mainArray[1];
int num3 = 0xff & mainArray[2];
// ...
'int num1 = mainArray [0];' verursacht ein Problem (wie in einem meiner Kommentare erwähnt). Es liefert nicht "0xFF", sondern "0xFFFFFFFF" (angenommen 32 Bit "int" und "char", die standardmäßig signiert sind) aufgrund der Zeichenerweiterung (obwohl es bei Compilern funktionieren könnte, bei denen "char" standardmäßig vorzeichenlos ist). Ich habe auch in einem anderen Kommentar erwähnt, wie ich es beheben kann. – Scheff
@Scheff, danke für deine Bemerkung, ich habe meine Antwort erweitert. – Akira
Das [ 'QByteArray'] (http://doc.qt.io/qt-5/qbytearray.html) einen' Operator [] ' sowie eine 'size()' Methode. Es kann ähnlich wie ein 'std :: vector' verwendet werden. – Scheff
Ist Ihnen bekannt, dass das eigentliche Parsen von '" \ xFF "' bereits im C++ Compiler durchgeführt wird? So werden String-Konstanten kompiliert, aber nichts mit 'QByteArray'. Wenn Sie auf 'mainArray [0]' zugreifen, erhalten Sie '255' (oder als hex' 0xFF'). – Scheff
Ich habe mainArray [0] (und 1 und 2 ..) versucht, aber diese enthalten zufällige Symbole wie ÿ und eine Box mit einem x darin (es wird nicht in den Kommentaren angezeigt). –