RBuf8 в char * в Symbian C ++ - PullRequest
       15

RBuf8 в char * в Symbian C ++

0 голосов
/ 01 декабря 2008

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

Ответы [ 5 ]

1 голос
/ 01 декабря 2008

Вам может понадобиться что-то с эффектом:

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

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

1 голос
/ 01 декабря 2008

void RBuf16 :: Copy (const TDesC8 &) возьмет 8-битный дескриптор и преобразует его в 16-битный дескриптор.

Вы должны иметь возможность отображать любой 16-битный дескриптор на экране. Если это не сработало, опубликуйте конкретный используемый вами API.

Когда API можно использовать с неопределенным числом параметров (например, void RDebug :: Printf (const char *, ...)),% S используется для «указателя на 16-битный дескриптор». Обратите внимание на верхний регистр% S.

0 голосов
/ 02 декабря 2008

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

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

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

0 голосов
/ 01 декабря 2008

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

RDebug::Printf("downloaded text %S", &buf); //note the address-of operator

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

0 голосов
/ 01 декабря 2008

Спасибо,% 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

...