我下载从Web服务到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);

修改作为清晰度..

我的转换函数看起来像这样..

空隙CMyApp :: DownloadCompleteL(){     {         RBuf16 BUF;         buf.CreateL(iTextBuffer.Length());         buf.Copy(iTextBuffer);

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

但是,这仍然会导致系统崩溃。我使用S60第三版FP2 1.1版

有帮助吗?

解决方案

你可能需要的是值得的效果:

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

本教程可以帮助你。

其他提示

空隙RBuf16 ::复制(常量TDesC8&)将一个8位描述符并将其转换成一个16位描述符。

您应该能够在屏幕上显示的任何16位描述符。如果它似乎不工作,发布您所使用的特定的API。

当一个API可以与参数未定义数量(状空隙中,RDebug :: printf的(常量字符*,...))一起使用,%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第三版FP2 1.1版

您有一个指针提供到在RDebuf :: printf的描述符所以它应该是

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

虽然使用_L的气馁。 _LIT宏是优选的。

正如quickrecipesonsymbainosblogspotcom指出,需要将指针传递到描述符。

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

此工作,因为RBuf8TDes8(并与16位版本的相同)的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top