Вопрос

Я загружаю текстовую строку из веб-службы в 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

Это было полезно?

Решение

Вам может понадобиться что-то вроде:

RDebug::Print( _L( "downloaded text %S" ), &buf );

Это руководство может вам помочь.

Другие советы

void RBuf16 :: Copy (const TDesC8 & amp;) возьмет 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

Вы должны указать указатель на дескриптор в RDebuf :: Printf, поэтому он должен быть

RDebug::Print(_L("downloaded text %S"), &buf);

Хотя использование _L не рекомендуется. Макрос _LIT является предпочтительным.

Как заявляет quickrecipesonsymbainosblogspotcom, вам нужно передать указатель на дескриптор.

RDebug :: Printf (" загруженный текст% S " ;, & amp; buf); // обратите внимание на адрес оператора

Это работает, потому что RBuf8 является производным от TDes8 (и то же самое с 16-битными версиями).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top