Я загружаю текстовую строку из веб-службы в RBuf8, используя такой код (он работает ..)
void CMyApp::BodyReceivedL( const TDesC8& data ) {
int newLength = iTextBuffer.Length() + data.Length();
if (iTextBuffer.MaxLength() < newLength)
{
iTextBuffer.ReAllocL(newLength);
}
iTextBuffer.Append(data);
}
Затем я хочу преобразовать RBuf8 в строку char *, которую я могу отображать в метке или что-то еще ... или для целей отладки отображать в
RDebug::Printf("downloading text %S", charstring);
редактировать для ясности ..
Моя функция преобразования выглядит так ...
void CMyApp :: DownloadCompleteL () { { RBuf16 buf; buf.CreateL (iTextBuffer.Length ()); buf.Copy (iTextBuffer);
RDebug::Printf("downloaded text %S", buf);
iTextBuffer.SetLength(0);
iTextBuffer.ReAlloc(0);
}
Но это все равно вызывает сбой. Я использую S60 3rd Edition FP2 v1.1


void RBuf16 :: Copy (const TDesC8 &) примет 8-битный дескриптор и преобразует его в 16-битный дескриптор.
Вы должны иметь возможность отображать на экране любой 16-битный дескриптор. Если это не работает, опубликуйте конкретный API, который вы используете.
Когда API может использоваться с неопределенным количеством параметров (например, void RDebug :: Printf (const char *, ...)),% S используется для «указателя на 16-битный дескриптор». Обратите внимание на верхний регистр% S.
Спасибо,% S - полезное напоминание.
Однако, похоже, это не работает ... моя функция преобразования выглядит так ...
void CMyApp::DownloadCompleteL() {
{
RBuf16 buf;
buf.CreateL(iTextBuffer.Length());
buf.Copy(iTextBuffer);
RDebug::Printf("downloaded text %S", buf);
iTextBuffer.SetLength(0);
iTextBuffer.ReAlloc(0);
}
Но это все равно вызывает сбой. Я использую S60 3rd Edition FP2 v1.1
Как указано в quickrecipesonsymbainosblogspotcom, вам необходимо передать указатель на дескриптор.
RDebug::Printf("downloaded text %S", &buf); //note the address-of operator
Это работает, потому что RBuf8 является производным от TDes8 (и то же самое с 16-битными версиями).
Вы, наверное, правы, потому что я пропустил _L ("") в строке, который заметил Аяз.
Вам может понадобиться что-то вроде:
RDebug::Print( _L( "downloaded text %S" ), &buf );
Этот учебник может вам помочь.
Вы должны указать указатель на дескриптор в RDebuf :: Printf, поэтому он должен быть
RDebug::Print(_L("downloaded text %S"), &buf);
Хотя использование _L не рекомендуется. Макрос _LIT является предпочтительным.
это отображает только первую букву RBuf16