5

UTF-16 形式のバイトを含む QByteArray があります。

Java プログラムは、ソケット経由で QT プログラムにデータを送信します。

//dos is DataOutPutStream
dos.writeChars("hello world");

QT プログラムの受信側では、ソケットからデータを QByteArray に読み込み、それを QString に変換したいと考えています。0h0e0l0l0o0 0w0o0r0l0d を持つ QByteArray のデータ変数を調べる

このようにQStringを作成しようとすると

QString str(byteArray)

結果の文字列は、最初と ofcouse で 0 バイトに遭遇したため、おそらく空です。これは、使用しているコンストラクターのドキュメントに、内部的に fromAscii を使用していて、渡したものが ascii ではないことが記載されているためです。

どうにかして QString::fromUTF-16 を使用する必要があると思いますが、それには ushort* が必要で、QbyteArray があります。

どうするのが一番いいのかアドバイスお願いします。

ありがとう、

4

2 に答える 2

4

QByteArray.data()へのポインターを取得し、 ushort* にキャストします。

于 2012-07-01T03:45:03.887 に答える
3

これは、utf-16 データが同じエンディアンであるか、BOM (バイト オーダー マーク) を持っていると仮定すると機能します。

QByteArray utf16 = ....;
auto str = QString::fromUtf16(
                reinterpret_cast<const ushort*>(utf16.constData()));
于 2012-07-01T15:37:08.323 に答える