0

我正在使用这种代码将 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 v1.1

4

5 回答 5

1

void RBuf16::Copy(const TDesC8&) 将采用 8 位描述符并将其转换为 16 位描述符。

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

当 API 可以与未定义数量的参数一起使用时(如 void RDebug::Printf(const char*, ...) ),%S 用于“指向 16 位描述符的指针”。注意大写的 %S。

于 2008-12-01T12:36:54.533 回答
1

您可能需要的是以下效果:

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

本教程可能会对您有所帮助。

于 2008-12-01T13:12:04.323 回答
0

谢谢,%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 v1.1

于 2008-12-01T12:44:43.520 回答
0

您必须在 RDebuf::Printf 中提供一个指向描述符的指针,所以它应该是

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

尽管不鼓励使用 _L。_LIT 宏是首选。

于 2008-12-02T15:47:07.660 回答
-1

正如 quickrecipesonsymbainosblogspotcom 所述,您需要将指针传递给描述符。

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

这是有效的,因为RBuf8它源自TDes8(并且与 16 位版本相同)。

于 2008-12-01T13:11:40.033 回答