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

使用模板可能不是一个好的解决方案,因为对于转换的输入字符串的每个大小,它都会在您的应用程序二进制文件中导致此代码块的新实例化。由于输出类型(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 回答
1

TBuf8用于二进制数据或非 Unicode 字符串。TBuf16用于 Unicode 字符串。TBuf是有条件编译的,并且始终是TBuf16Symbian OS 原生 Unicode。

尝试QString::fromLocal8Bit()使用TBuf8::Ptr()

于 2011-08-16T15:31:48.407 回答