什么是操纵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太根深蒂固

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top