我正在使用这种代码将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
答案 0 :(得分:1)
void RBuf16 :: Copy(const TDesC8&amp;)将采用8位描述符并将其转换为16位描述符。
您应该能够在屏幕上显示任何16位描述符。如果它似乎不起作用,请发布您正在使用的特定API。
当API可以与未定义数量的参数一起使用时(如void RDebug :: Printf(const char *,...)),%S用于“指向16位描述符的指针”。请注意大写的%S。
答案 1 :(得分:1)
答案 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位版本相同)。