Как конвертировать TBuf8 в QString - PullRequest
0 голосов
/ 16 августа 2011

Я пытался конвертировать, используя следующий код:

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 ]

1 голос
/ 17 августа 2011

Использование шаблона, вероятно, не является хорошим решением, так как это приведет к созданию нового экземпляра этого блока кода в двоичном файле вашего приложения для каждого размера входной строки, которая преобразуется. Поскольку выходной тип (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);
1 голос
/ 16 августа 2011

TBuf8 используется для двоичных данных или не-Unicode строк. TBuf16 используется для строк Unicode. TBuf условно компилируется и всегда будет TBuf16, поскольку Symbian OS изначально является Unicode.

Попробуйте использовать QString::fromLocal8Bit() с TBuf8::Ptr()

...