将UTF-16 QByteArray转换为QString

时间:2012-07-01 03:39:13

标签: qt unicode

我有一个QByteArray,其中包含UTF-16格式的字节。

Java程序使用

通过套接字将数据发送到QT程序
//dos is DataOutPutStream
dos.writeChars("hello world");

在QT程序的接收器端,我将socket中的数据读入QByteArray,我想将其转换为QString。检查QByteArray的数据变量它有0h0e0l0l000 0w0o0r0l0d

当我尝试像这样制作一个QString时

QString str(byteArray)

结果字符串是空的,可能因为它在开头和ofcouse遇到0字节,因为我使用的构造函数的文档说它在内部使用fromAscii而我传递的不是ascii。

我想我必须以某种方式使用QString :: fromUTF-16,但这需要一个ushort *并且我有一个QbyteArray。

请告知最佳方法。

谢谢,

2 个答案:

答案 0 :(得分:4)

获取指向QByteArray.data()的指针并将其转换为ushort *

答案 1 :(得分:2)

这可行,假设您的utf-16数据具有相同的字节序或具有BOM(字节顺序标记):

QByteArray utf16 = ....;
auto str = QString::fromUtf16(
                reinterpret_cast<const ushort*>(utf16.constData()));