0

次のコードを使用して変換しようとしました。

template< unsigned int size >
static QString
TBuf82QString( const TBuf8< size > &buf )
{
   return QString::fromUtf16(
      reinterpret_cast<unsigned short*>(
         const_cast<TUint8*>(
            buf.Ptr() ) ), buf.Length() );
}

しかし、それは常にのようなものを返します?????b

編集:変更されたコード例

4

2 に答える 2

1

TBuf8バイナリデータまたは非Unicode文字列に使用されます。TBuf16Unicode文字列に使用されます。TBuf条件付きでコンパイルさTBuf16れ、SymbianOSはネイティブでUnicodeであるため常に実行されます。

で使用QString::fromLocal8Bit()してみてくださいTBuf8::Ptr()

于 2011-08-16T15:31:48.407 に答える
1

テンプレートを使用すると、変換される入力文字列のサイズごとに、アプリケーションバイナリ内のこのコードブロックが新たにインスタンス化されるため、おそらく適切な解決策ではありません。出力タイプ(QString)にはコンパイル時定数が含まれていないため、これは、ゲインがないためにコードが膨張することを意味します。

より良いアプローチは、以下TBuf8<N>から継承するという事実を活用することTDesC8です。

QString TBuf2QString(const TDesC8 &buf)
{
    return QString::fromLocal8Bit(reinterpret_cast<const char *>(buf.Ptr()),
                                  buf.Length());
}

TBuf<16> foo(_L("sometext"));
QString bar = TBuf2QString(foo);
于 2011-08-16T20:57:52.923 に答える