c++ qt qstring qtcore qbytearray

c++ - QByteArray a QString



qt qtcore (7)

Tengo problemas con QByteArray y QString .

Estoy leyendo un archivo y almacena su información en un QByteArray . El archivo está en Unicode, por lo que contiene algo así como: t/0 e/0 s/0 t/0 /0 /0

Estoy tratando de comparar este valor con mi valor especificado, pero falla, porque en el depurador veo que no es una cadena unicode.

El código explicará todo:

QByteArray Data; //contains unicode string "t/0 e/0 s/0 t/0 /0 /0" QString myValue = "test"; //value to compare. if(Data.contains(myValue)) //do some stuff. else //do other stuff.

En el depurador, me muestra que la variable Data tiene el valor "t/0 e/0 s/0 t/0 /0 /0" y myValue tiene el valor "test" . ¿Cómo puedo arreglarlo?


Puede usar QTextCodec para convertir el bytearray en una cadena:

QString DataAsString = QTextCodec::codecForMib(1015)->toUnicode(Data);

(1015 es UTF-16, 1014 UTF-16LE, 1013 UTF-16BE, 106 UTF-8)

De su ejemplo, podemos ver que la cadena "test" está codificada como "t/0 e/0 s/0 t/0 /0 /0" en su codificación, es decir, cada carácter ascii va seguido de un /0 -byte, o resp. cada carácter ascii está codificado como 2 bytes. La única codificación Unicode en la que las letras ascii están codificadas de esta manera, son UTF-16 o UCS-2 (que es una versión restringida de UTF-16), por lo que en su caso se necesita 1015 mib (suponiendo que su endianess local es la lo mismo que la entrada endianess).


Puedes usar:

QString DataAsString = data.trimmed();

Los datos son un QByteArray.


Puedes usar:

QString::fromStdString(byteArray.toStdString())



Utilice QString::fromUtf16((ushort *)Data.data()) , como se muestra en el siguiente ejemplo de código:

#include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // QByteArray to QString // ===================== const char c_test[10] = {''t'', ''/0'', ''e'', ''/0'', ''s'', ''/0'', ''t'', ''/0'', ''/0'', ''/0''}; QByteArray qba_test(QByteArray::fromRawData(c_test, 10)); qDebug().nospace().noquote() << "qba_test[" << qba_test << "]"; // Should see: qba_test[t QString qstr_test = QString::fromUtf16((ushort *)qba_test.data()); qDebug().nospace().noquote() << "qstr_test[" << qstr_test << "]"; // Should see: qstr_test[test] return a.exec(); }

Esta es una solución alternativa a la que usa QTextCodec. El código ha sido probado usando Qt 5.4.



QString a = "test"; QByteArray a1 = a.toUtf8(); QString backToString = a1;