Pergunta

Estou baixando uma cadeia de texto de um serviço web em um RBuf8 usando este tipo de código (funciona ..)

void CMyApp::BodyReceivedL( const TDesC8& data ) {
    int newLength = iTextBuffer.Length() + data.Length();
    if (iTextBuffer.MaxLength() < newLength)
        {
            iTextBuffer.ReAllocL(newLength);
        }
    iTextBuffer.Append(data);
}

Eu quero converter o RBuf8 em um char * corda posso exibir em um rótulo ou o que quer .. ou para fins de depuração, exibição em

RDebug::Printf("downloading text %S", charstring);

Editar para maior clareza ..

minha função de conversão parece com isso ..

vazio CMyApp :: DownloadCompleteL () { { RBuf16 buf; buf.CreateL (iTextBuffer.Length ()); buf.Copy (iTextBuffer);

    RDebug::Printf("downloaded text %S", buf);
    iTextBuffer.SetLength(0);
    iTextBuffer.ReAlloc(0);                                 
}

Mas isso ainda causa um acidente. Eu estou usando S60 3rd Edition FP2 v1.1

Foi útil?

Solução

O que você pode precisar é algo no sentido de:

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

Este tutorial pode ajudá-lo.

Outras dicas

vazio RBuf16 :: Copy (const TDesC8 &) terá um descritor de 8bit e convertê-lo em um descritor de 16bit.

Você deve ser capaz de exibir qualquer descritor 16bit na tela. Se ele não parece trabalho, postar o API específica que você está usando.

Quando uma API pode ser usado com um número indefinido de parâmetros (como RDebug vazio :: Printf (const char *, ...)),% S é usado para "ponteiro para descritor 16bit". Observe a maiúsculas% S.

Graças, o% S é um lembrete útil.

No entanto, isso não parece trabalho .. minha função de conversão parece com isso ..

void CMyApp::DownloadCompleteL() {
    {
        RBuf16 buf;
        buf.CreateL(iTextBuffer.Length());
        buf.Copy(iTextBuffer);

        RDebug::Printf("downloaded text %S", buf);
        iTextBuffer.SetLength(0);
        iTextBuffer.ReAlloc(0);                 
    }

Mas isso ainda causa um acidente. Eu estou usando S60 3rd Edition FP2 v1.1

Você tem que fornecer um ponteiro para o descritor em RDebuf :: Printf por isso deve ser

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

Embora o uso de _L é desencorajado. _LIT macro é preferido.

Como afirmado por quickrecipesonsymbainosblogspotcom, você precisa passar um ponteiro para o descritor.

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

Isso funciona porque RBuf8 é derivado de TDes8 (eo mesmo com as versões de 16 bits).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top