Pregunta

Estoy descargando una cadena de texto de un servicio web en un 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);
}

Quiero convertir el RBuf8 en una cadena char * que pueda mostrar en una etiqueta o lo que sea ... o para fines de depuración, mostrar en

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

editar para mayor claridad ..

Mi función de conversión se ve así ...

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

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

Pero esto todavía causa un bloqueo. Estoy usando S60 3rd Edition FP2 v1.1

¿Fue útil?

Solución

Lo que puede necesitar es algo relacionado con:

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

Este tutorial puede ayudarlo.

Otros consejos

void RBuf16 :: Copy (const TDesC8 & amp;) tomará un descriptor de 8 bits y lo convertirá en un descriptor de 16 bits.

Debería poder mostrar cualquier descriptor de 16 bits en la pantalla. Si parece que no funciona, publique la API específica que está utilizando.

Cuando una API se puede usar con un número indefinido de parámetros (como void RDebug :: Printf (const char *, ...)), se usa% S para el puntero al descriptor de 16 bits. Tenga en cuenta las mayúsculas% S.

Gracias, el% S es un recordatorio útil.

Sin embargo, esto no parece funcionar ... mi función de conversión se ve así ...

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

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

Pero esto todavía causa un bloqueo. Estoy usando S60 3rd Edition FP2 v1.1

Debe proporcionar un puntero al descriptor en RDebuf :: Printf para que sea

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

Aunque se desaconseja el uso de _L. Se prefiere _LIT macro.

Como lo indica quickrecipesonsymbainosblogspotcom, debe pasar un puntero al descriptor.

RDebug :: Printf (" texto descargado% S " ;, & amp; buf); // tenga en cuenta la dirección del operador

Esto funciona porque RBuf8 se deriva de TDes8 (y lo mismo con las versiones de 16 bits).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top