我尝试使用以下代码进行转换:
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
的内容。
编辑:更改了代码示例
答案 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);