原创 Symbian中HBufC的使用收藏

新一篇: The fucking TInt64 | 旧一篇: 浏览手机的文件夹,上传照片到服务器

HBufC描述符是我们使用的比较多的描述符对象。这里是我在学习了一段时间的symbian之后的经验:
HBufC是建立在堆内存上的对象,所以可以避开symbian中栈的大小的限制。

一、我们在想要得到HBufC的时候,可以使用2种方式:
1、HBufC* buf = HBufC::NewL(128);
2、HBufC* buf = TDesC.AllocL();
第一种方法使用HBufC提供的构造函数,得到一定容量的描述符。第二种是从描述符的基类TDesC对象得到HBufC对象。特别的是,第二种方法除了得到一个长度(Length)和容量(MaxLength)都和原始的描述符TDesC对象的长度(Length)相同的描述符外,还将TDesC对象的内容Copy到了新的对象中。

二、在使用HBufC描述符的时候,我们可能用到:
1、比较描述符。
 在比较两个描述符是不是相同的时候,我们可以使用基类TDesC提供的“==”方法。即:
 _LIT(KName,"name");
 if(*buf == KName)
 {
  //do something
 }
2、查找某个字符的位置。
 TInt loc = buf->Locate(':');//查找字符“:”第一次出现的位置
 if(loc == KErrNotFound)
 {
  //没有找到要查找的字符串
 }
3、查找某个字符串的位置。
 _LIT(KToFind,"*abc*");
 TInt loc = buf->Match(KToFind);//查找字符串“abc”出现的位置
 if(loc == KErrNotFound)
 {
  //没有找到
 }
 
 这里要特别注意的是上面的字符串“*abc*”中两个“*”的意义。和普通的字符串查找一样, “*”在这里表示若干个字符。那么可以想象,如果没有这两个“*”,就只有buf完全等同于“abc” 的时候,才不会返回KErrNotFound。
4、向HBufC描述符中添加内容。
 在向HBufC中添加内容的时候,一般使用
 buf->Des().Copy(_L("abc"));
 buf->Des().Append(_L("abc"));
 buf->Des().Append('A');
 buf->Des().AppendNum(1024);
 这样的方法。在调用了上面4条语句之后,buf的内容应该是“abcabcA1024”,其长度为11。
 需要注意的是Copy方法和Append方法的区别。前者会覆盖原有的数据,并首先将长度清零,再加上新内容的长度。 后者会在原有内容后面追加内容。 或者我们可以这么理解:
 buf->Des().Copy(_L("abc"));
 等同于
 buf->Des().Zero();
 buf->Des().Append(_L("abc")); 

上面是匆忙写下的内容,如果有错误的地方,希望大家能帮我指出来。

发表于 @ 2008年01月03日 16:22:00|评论(loading...)|编辑

新一篇: The fucking TInt64 | 旧一篇: 浏览手机的文件夹,上传照片到服务器

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © cuilichen