用Symbian C ++编译RBuf8到char *

时间:2008-12-01 12:22:06

标签: string symbian s60

我正在使用这种代码将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);
为了清晰起见,

修改

我的转换功能如下所示..

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 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可能需要的是:

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

This tutorial可能对您有帮助。

答案 2 :(得分: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 3rd Edition FP2 v1.1

答案 3 :(得分:0)

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

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

虽然不鼓励使用_L。 _LIT宏是首选。

答案 4 :(得分:-1)

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

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

这是有效的,因为RBuf8派生自TDes8(与16位版本相同)。