Nokia官方培训笔记 第六篇Descriptors |
| 作者:csdn 来源:csdn 发布时间:2006-11-30 22:06:11 |
Introduction描述符(Descriptors)封装了字符串和二进制数据,用于替代C中的以NULL结尾的字符串。它的长度和数据都封装在了描述符中,Symbian API中用的都是描述符。如: TPtrC ptr (KHelloWorld); CEikonEnv::Static()->InfoMsg(ptr); Main Types of Descriptors
主要可以分为以下几类,其中带C的是不可修改的。
Descriptor Modification描述符可以是可修改的和不可修改的,通常带C的都是不可修改的,不可修改的是可修改的基类。
Descriptor Width在描述符类后加上8或者16影响了存储在描述符中的数据的宽度,默认是16位的,处理二进制或ASCII时采用8位。
下面开始对上述5类描述符进行详细介绍,首先看一下类继承关系 这里显示的是8位的,16位默认的类继承关系与此一致 Abstract Descriptors 除Literal外的所有描述符的基类,提供了基本的接口和基础功能。他们本身不能实例化,一般用作函数参数。 TDesC:提供了比较、复制、搜索、提取部分字符串的函数。 TInt TDesCUtil::SumLengths(const TDesc& aDesC1, const TDesc& aDesC2) TDes:继承自TDesC,添加了许多用于修改数据的函数。其最大长度是描述符被创建时确定的。 TInt TDesCUtil::AppendL(TDesc& aTarget, const TDesc& aDesC) Literal Descriptors提供了一种将字符串放在只读存储空间中的机制(实际存放在程序的数据区,而不是真的在ROM中)。一般不采用TLitC而直接采用_LIT()宏。 _LIT(KHelloWorld, "Hello World!"); 通过()操作符可以得到 const TDesC&。 TInt length = KHelloWorld().Length(); 在函数参数为const TDesC&可以直接使用KHelloWorld。iLabel->SetTextL(KHelloWorld); Buffer Descriptors
将数据作为本身的一部分存储在stack上,他们的最大长度是在编译时确定的。 TBuf<16> helloWorld = KHelloWorld; 在内存中如下所示: TBufC的用法如下: _LIT(KHelloWorld, "Hello World"); TBuf的用法如下: const TInt bufLen = 6; Pointer Descriptor用于引用存储在其他地方的数据,如: const unsigned char KBuffer[ ] = {0x00, 0x33, 0x66, 0x99, 0xbb, 0xff}; 在内存中如下所示: TPtr的用法: _LIT(KHelloWorld, "Hello World"); Heap Descriptors动态在堆(heap)上分配,通过HBufC的API,数据可以被set和reset,但是不能被修改。如: HBufC* heapBuf = HBufC::NewL(KHelloWorld().Length()); 在内存中的情况如下图所示: HBufC通常在以下几种情况下使用:
对HBufC中的内容进行修改: _LIT(KHello, "Hello!"); heapBuf = heapBuf->ReAllocL(KHello().Length() + KWorld().Length()); TPtr ptr (heapBuf->Des()); //DON'T use TPtr ptr = heapBuf->Des(); this will set maxlen to 6 but not 12... 下面介绍Descriptors的具体用法: Non-Modifying MethodsLength(),Size(),Left(),Right(),Mid(),Compare(),Locate(),LocateReverse (),Find(),Match()等。以下代码示例描述了如何在一个descriptor中找到<>中的内容,如果不存在,返回整个字符 串: static const TUint KAddressStartChar = '<'; TPtrC ExtractAddressNumber( const TDesC& aAddressString) Modifying MethodsZero(),Copy(),Num(),Format(),Insert(),Replace(),Delete() |
| [] [返回上一页] [打 印] |
|
文章评论 |




