如何将TBuf8转换为QString

时间:2011-08-16 10:57:35

标签: qt symbian type-conversion descriptor qstring

我尝试使用以下代码进行转换:

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的内容。

编辑:更改了代码示例

2 个答案:

答案 0 :(得分:1)

TBuf8用于二进制数据或非Unicode字符串。 TBuf16用于Unicode字符串。 TBuf是有条件编译的,并且始终为TBuf16,因为Symbian OS本身就是Unicode。

尝试将QString::fromLocal8Bit()TBuf8::Ptr()

一起使用

答案 1 :(得分: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);