Symbian C ++的 - 在描述符子串操作
题
什么是操纵TDesC字符串,例如,以获得一个子首选/最简单的方法。
我会给你我的情况的一个例子。
RBuf16 buf;
...
CEikLabel label;
...
label->SetTextL(buf); // (SetTextL takes a const TDesC&)
我想从一个BUF子。所以,我想和直接操纵RBuf16如果这样什么是最好的方法是什么?
有没有办法转换为const char *这样我就可以使用标准的C字符串处理。
在预先感谢
解决方案
读取descriptors.blogspot.com(向下滚动一次加载)。
可以使用TDES :: LeftTPtr,TDES :: RightTPtr或TDES :: MidTPtr这将给你的子串作为TPtr一样(即其操纵原始数据的描述符)。
如果你想创建你的子副本可以使用TDES ::复制功能。
其他提示
最佳与否,我不能评论,但是我使用下列方法来提取描述符的子串:
TDes::LeftTPtr()
TDes::MidTPtr()
TDes::RightTPtr()
或
TDesC::Left()
TDesC::Mid()
TDesC::Right()
与两组之间存在的差异在于,前者返回一个新的修改的描述符,后者,一个新的非修改的描述符,将含有子串。
当你在Symbian平台上发展,我会强烈建议遵循Symbian的约定,而不是从一个标准的C或所有的时间来看C ++点想的Symbian C ++的。使用Symbian已经具体地提供,而不是其塞班可以或可以不直接支持标准的C / C ++库的库。由于基于Symbian开发的应用程序的最终目标是移动设备,可靠性和鲁棒性应用最至关重要的运行,你应该坚持什么Symbian的喜欢和建议。
如果你想从一个RBuf16一子,这是简单 - 只需要使用TDes16::MidTPtr
您可以通过这样做转换为const char *:
TPtr8 narrowBuf;
// Create a buffer with enough space to store every character, plus one for
// a null terminator
narrowBuf.AllocL( buf.Length() + 1);
// TPtr8::Copy accepts a TDesC16
narrowBuf.Copy( buf );
// Append a null terminator and return a pointer to the resultant data
const char* ptr = (const char*)narrowBuf.PtrZ();
不过,你现在有一个是原始数据的缩小副本。如果你想现在重新设置标签,你会使用之前需要扩大它(TDes16 ::复制(常量TDesC8&))。试图让塞班像“正常” C ++使用char *和wchar_t的*并没有真正的工作 - 描述符的使用在OS太根深蒂固