RBuf8为char *在Symbian C ++的
题
我下载从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版
解决方案
其他提示
空隙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
此工作,因为RBuf8
从TDes8
(并与16位版本的相同)的。