Length()和Size()
TDesC::Size()返回描述符的字节大小,而TDesC::Length()则返回其所包含的字符数目。
对于8位的描述符来说,字节大小和字符长度是一样的,因为一个字符的大小即为一字节。在16位字符串中,每个字符占用两字节。因此对于中立的和显式声明的宽描述符来说,Size()的返回值总是Length()返回值的两倍。
MaxLength()和改变长度的方法
TDes::MaxLength()返回可变描述符所申请的最大长度。
TDes::SetLength()可以被调整为零到其最大长度之间的任何数值。
TDes::Zero()在描述符对象申请时将其长度设置为零。
TPtr(C)::Set()和TDes::operator=()
TPtr和TPtrC都提供了Set()方法。此方法可用来将指针指向其他的字符串数据。描述符对象的长度和最大长度对象也要做相应的改变。
TDes提供了一个赋值操作符,用来将数据拷入已被可变描述符引用了的内存中。描述符的长度将根据新的内容予以更新,但是最大长度不会改变。所以必须保证分配给描述符的新数据的长度不能大于最大长度,否则拷贝将造成严重错误。Set()和TDes::operator=()比较容易被混淆。
TBufC::Des()和HBufC::Des()
TBufC和HBufC都提供了Des()方法,此方法返回一个指向缓存所容纳数据的可变描述符指针。不可变缓存描述符里的内容不能被直接改变,而调用Des()使得其数据可以被改变。此方法会同时更新可变描述符指针的长度成员以及它指向的常量缓存描述符的长度成员。比如对于HBufC:
HBufC* heapBuf = HBufC::NewLC(20);
TPtr ptr(heapBuf->Des()); // Use ptr to modify heapBuf
在使用HBufC时一种常见的低效的做法是,在需要用不可变描述符(TDesC)时,用Des()返回一个可改变的指针描述符对象(TPtr)。这样做不是不对,但既然HBufC本身就继承于TDesC,那么就可以直接去除引用,这样也更加清晰、有效。
const TDesC& CExample::Inefficient()
{
return (iHeapBuffer->Des());
// could be replaced more efficiently with
return (*iHeapBuffer);
}
一些其他的常用API是:
● TDesC::Find()、TDesC::Locate()、TDesC::Match()。
● 使用TDesC::Left()、TDesC::Right()和TDesC::Mid()来提取子字符串。
● 用TDes::Append()的不同版本来添加数据。
● 通过调用TDes::Copy()的不同重载版本来在描述符之间传递数据。
在Symbian Developer Library里可以找到关于各种描述符API更多的信息。
更多信息 请参阅 http://book.csdn.net/bookfiles/1240/100124036916.shtml 这本书真的不容错过啊