Symbian 中的字符串
来源:互联网 发布:lol域名可以建站 编辑:程序博客网 时间:2024/04/30 14:48
SYMBIAN 中的字符串根据存储来分,可以分为两大类,8位和16位字符串。如果只处理,英文,数字什么的当然8位就够了。可是在中国,肯定不可避免的要处理中文。在 SYMBIAN系统里,中文或者其他各种复杂的文字都必须使用UNICODE来处理,每个字用2个字节进行存储,因此就产生了16位的字符串。一般我们都直接处理16位字符串。
即使是16位的字符串,又分为TDes16, TDesC16,TBuf16,TBufC16,HBufC16等等一堆,常常让你看着无从入手。其实不考虑他们各自的实现,我们可以这样理解:TDes 为虚基类,然后TBuf和HBuf都是由TDes派生。当然这只是为了理解方便,具体SYMBIAN底层到底是如何实现的,我们就不在此讨论了。
TDes:
我们将TDes理解成一个字符串的虚基类,SYMBIAN接口中用到字符串的API,基本都是用TDes或者TDesC的引用作为参数。有没有‘C’的差别其实就是“const”,TDesC是const字符串。TDes是无法直接创建的,只能通过其它字符串类型获得,因此我们将其理解为虚基类。
TBuf:
TBuf类是一个模板类,模板参数要求是该字符串的最大长度。该字符串类是分配在内存栈上的,因此不建议分配过大的字符串,防止栈溢出或分配失败,而且一般作为临时字符串变量来使用,建议使用后就尽快释放。同理,TBuf和TBufC的差别也只是“const”的差别。
HBufC:
HBufC 虽然也有一个‘C’,但是它并非const的意思,不知道设计SYMBIAN的人员为何起这么一个容易让人误解的名字。开头用‘H’字母,应该很清楚的说明了,该字符串是从内存堆(Heap)分配而来的。因此,这个字符串必须用new操作来分配,而不能直接生成实例。
另外,HBuC字符串创建的时候,不能用普通的new操作,而必须使用HBucfC类自己的static成员——New、NewL或NewLC。了解 SYMBIAN机制的同学,应该都知道,SYMBIAN的很多类都必须使用自己的NEW操作来创建,而不能直接使用C++的new操作符,具体的原因我们就不在这里解释了。创建的时候,同样需要指定该字符串的最大长度。
TPtr:
说了那么多,那么对于字符串的操作怎么办呢?也许你们已经发现了,无论是HBufC还是TBuf,他们都只提供了一些普通的赋值和字符串操作,至于更复杂一些的字符串操作就没有了。那我们要做字符串链接,比较,删除,插入,替换等等各种操作又该如何做呢,是否直接获得字符串底层的内存指针,自己实现?
记住,不到万不得已,千万不要直接获得字符串类底层的内存指针直接更改。SYMBIAN的字符串类中除了存储字符串的内容外,还定义了字符串的其他各种属性,如果你直接对内存操作的话,其它字符串属性得不到更新,会导致输出错误。
为了解决字符串的各种操作处理,SYMBIAN为我们提供了TPtr类。从命名我们很容易理解,这是一个指针类。通过该指针类,提供了一系列的字符串操作接口,基本上能满足大家对字符串处理的各种要求。
那么如何转换成TPtr类呢。对于TBuf类,本是就是直接从TPtr派生的,我们可以直接将其赋值给TPtr实例,以使用TPtr接口。而对于HBufC类,则提供了一个Des接口,直接返回TPtr实例。
即使是16位的字符串,又分为TDes16, TDesC16,TBuf16,TBufC16,HBufC16等等一堆,常常让你看着无从入手。其实不考虑他们各自的实现,我们可以这样理解:TDes 为虚基类,然后TBuf和HBuf都是由TDes派生。当然这只是为了理解方便,具体SYMBIAN底层到底是如何实现的,我们就不在此讨论了。
TDes:
我们将TDes理解成一个字符串的虚基类,SYMBIAN接口中用到字符串的API,基本都是用TDes或者TDesC的引用作为参数。有没有‘C’的差别其实就是“const”,TDesC是const字符串。TDes是无法直接创建的,只能通过其它字符串类型获得,因此我们将其理解为虚基类。
TBuf:
TBuf类是一个模板类,模板参数要求是该字符串的最大长度。该字符串类是分配在内存栈上的,因此不建议分配过大的字符串,防止栈溢出或分配失败,而且一般作为临时字符串变量来使用,建议使用后就尽快释放。同理,TBuf和TBufC的差别也只是“const”的差别。
HBufC:
HBufC 虽然也有一个‘C’,但是它并非const的意思,不知道设计SYMBIAN的人员为何起这么一个容易让人误解的名字。开头用‘H’字母,应该很清楚的说明了,该字符串是从内存堆(Heap)分配而来的。因此,这个字符串必须用new操作来分配,而不能直接生成实例。
另外,HBuC字符串创建的时候,不能用普通的new操作,而必须使用HBucfC类自己的static成员——New、NewL或NewLC。了解 SYMBIAN机制的同学,应该都知道,SYMBIAN的很多类都必须使用自己的NEW操作来创建,而不能直接使用C++的new操作符,具体的原因我们就不在这里解释了。创建的时候,同样需要指定该字符串的最大长度。
TPtr:
说了那么多,那么对于字符串的操作怎么办呢?也许你们已经发现了,无论是HBufC还是TBuf,他们都只提供了一些普通的赋值和字符串操作,至于更复杂一些的字符串操作就没有了。那我们要做字符串链接,比较,删除,插入,替换等等各种操作又该如何做呢,是否直接获得字符串底层的内存指针,自己实现?
记住,不到万不得已,千万不要直接获得字符串类底层的内存指针直接更改。SYMBIAN的字符串类中除了存储字符串的内容外,还定义了字符串的其他各种属性,如果你直接对内存操作的话,其它字符串属性得不到更新,会导致输出错误。
为了解决字符串的各种操作处理,SYMBIAN为我们提供了TPtr类。从命名我们很容易理解,这是一个指针类。通过该指针类,提供了一系列的字符串操作接口,基本上能满足大家对字符串处理的各种要求。
那么如何转换成TPtr类呢。对于TBuf类,本是就是直接从TPtr派生的,我们可以直接将其赋值给TPtr实例,以使用TPtr接口。而对于HBufC类,则提供了一个Des接口,直接返回TPtr实例。
- SYMBIAN中的字符串操作
- Symbian 中的字符串
- SYMBIAN中的字符串操作
- Symbian中的字符串操作
- SYMBIAN中的字符串操作
- symbian中的字符串操作的有关方法
- Symbian中的字符串——描述符
- SYMBIAN 字符串操作
- symbian 的字符串
- SYMBIAN 字符串操作
- symbian 缓冲 字符串
- SYMBIAN 字符串操作
- SYMBIAN 字符串操作
- SYMBIAN 字符串操作
- SYMBIAN 字符串操作
- Symbian 字符串自动换行
- Symbian字符串转换
- symbian 字符串及格式化
- 软件设计理念2.0:简化软件操作,提升用户体验
- url传递中文的解决方案(javascript 加密中文传递)
- 程序员怎样学数学:半路出家也能让编程是小菜一碟
- C#代码与javaScript函数的相互调用
- 今天发现,高手都在CSDN里,所以决定从今以后我的学习主要来源就在此网!
- Symbian 中的字符串
- 关于word安全模式
- 用phpunit调试PHP程序
- php中的stdclass
- struts+hibernate的分页技术
- 国家名称
- PHP实例:PHP取GB2312编码字符串首字母的方法
- 一些给自己的废话
- HTML标记【超级链接的使用】!