原文出处:http://blog.sina.com.cn/s/blog_53a8819a01000b1u.html
TBuf:TBuf类是一个模板类,模板参数要求是该字符串的最大长度。该字符串类是分配在内存栈上的,因此不建议分配过大的字符串,防止栈溢出或分配失败,而且一般作为临时字符串变量来使用,建议使用后就尽快释放。同理,TBuf和TBufC的差别也只是“const”的差别。
HBufC:HBufC虽然也有一个‘C’,但是它并非const的意思,不知道设计SYMBIAN的人员为何起这么一个容易让人误解的名字。开头用‘H’字母,应该很清楚的说明了,该字符串是从内存堆(Heap)分配而来的。因此,这个字符串必须用new操作来分配,而不能直接生成实例。
另外,HBufC字符串创建的时候,不能用普通的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实例。
如何将8位字符串转换成16位?
我们写程序的时候为了方便,经常把字符串直接写到程序里,比如一个文件目录什么的。这样获得的字符串都是8位的,而为了字符串操作,常常需要将其转换为16位字符串,那怎么办呢?其实也很简单,16位的字符串一般都可以接受8位字符串的赋值。我们可能会这样实现:
char str_dir[] = {"c:/dir/test/test.dat"};
TBuf8<128>;
str_dir8;str_dir8.Copy( (uint8*)str_dir );
TBuf16<128> str_dir16;
str_dir16.Copy( str_dir8 );
OK。这样我们便获得了16位的字符串。
关于SYMBIAN字符串的内容就讲到这里吧,具体的操作还是需要去查S60 SDK。