我有一个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。
请告知最佳方法。
谢谢,
答案 0 :(得分:4)
获取指向QByteArray.data()的指针并将其转换为ushort *
答案 1 :(得分:2)
这可行,假设您的utf-16数据具有相同的字节序或具有BOM(字节顺序标记):
QByteArray utf16 = ....;
auto str = QString::fromUtf16(
reinterpret_cast<const ushort*>(utf16.constData()));