QByteArray to QString
Solution 1
You can use QTextCodec to convert the bytearray to a string:
QString DataAsString = QTextCodec::codecForMib(1015)->toUnicode(Data);
(1015 is UTF-16, 1014 UTF-16LE, 1013 UTF-16BE, 106 UTF-8)
From your example we can see that the string "test"
is encoded as "t\0 e\0 s\0 t\0 \0 \0"
in your encoding, i.e. every ascii character is followed by a \0
-byte, or resp. every ascii character is encoded as 2 bytes. The only unicode encoding in which ascii letters are encoded in this way, are UTF-16 or UCS-2 (which is a restricted version of UTF-16), so in your case the 1015 mib is needed (assuming your local endianess is the same as the input endianess).
Solution 2
You can use this QString constructor for conversion from QByteArray to QString:
QString(const QByteArray &ba)
QByteArray data;
QString DataAsString = QString(data);
Solution 3
You can use:
QString::fromStdString(byteArray.toStdString())
Solution 4
you can use QString::fromAscii()
QByteArray data = entity->getData();
QString s_data = QString::fromAscii(data.data());
with data()
returning a char*
for QT5, you should use fromCString()
instead, as fromAscii()
is deprecated, see https://bugreports.qt-project.org/browse/QTBUG-21872 https://bugreports.qt.io/browse/QTBUG-21872
Solution 5
You may find QString::fromUtf8() also useful.
For QByteArray input
of "\010"
and "\000"
,
QString::fromLocal8Bit(input, 1) returns "\010"
and ""
QString::fromUtf8(input, 1) correctly returns "\010"
and "\000"
.

Nika
Updated on January 04, 2022Comments
-
Nika 12 months
I'm having issues with
QByteArray
andQString
.I'm reading a file and stores its information in a
QByteArray
. The file is in unicode, so it contains something like:t\0 e\0 s\0 t\0 \0 \0
I'm trying to compare this value to my specified value, but it fails, because in the debugger I see it's not an unicode string.
The code will explain everything:
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.
In the debugger, it shows me that the variable
Data
has the value"t\0 e\0 s\0 t\0 \0 \0"
andmyValue
has the value"test"
. How can I fix it? -
László Papp about 9 years*Ascii() is deprecated in Qt 5! Do not use it.
-
László Papp about 9 yearsNot sure why this is a so upvoted reply. This is giving an unusual solution that the majority uses and should use. Providing it alongside the usual conversion methods would have been a good reply, but on its own, it is strange.
-
BeniBela about 9 yearsActually he can not use any of this, because he wants to convert utf-16, not ascii
-
BeniBela about 9 years@LaszloPapp: Do you mean
QString::fromUTf16
? That takes a ushort pointer, which would require some very ugly casting to pass aQByteArray
-
László Papp about 9 years@BeniBela: yes, but why cannot it be utf8? In which case why not suggest from/toUtf8()?
-
BeniBela about 9 years@LaszloPapp: Because of the example. He wants to convert
t\0e\0s\0t\0
totest
. If it were utf-8, there would be no\0
-bytes -
László Papp about 9 years@BeniBela: OK, fair enough. Can you make this clear in your answer why you suggest utf16? As you can see, it was a bit unclear for me. You will also get a few more upvotes with the bumping of the thread. :)
-
ssc over 7 yearsI can't seem to find
fromCString()
, did you mean (or was the method renamed since the Q / A) tofromCFString()
? -
iyasar over 6 yearsNo actually use fromLatin1 instead of fromAscii
-
TSG over 1 yearThis should be the accepted answer. Functional and simpler (let Qt handle conversion automatically)