TBuf 与TBufC及TPtrC的练习

TBuf 是可修改的描述符,TBufC 是不可修改的描述符,再次复习一下它们之间的继承关系

TDesC -> TBufCBase -> TBufC
                   -> HBufC
      -> TDes      -> TBufBase -> TBuf
                   -> TPtr
      -> TPtrC
 下面是练习的代码

代码
// 使用 TBuf 例子
void UseTBuf()
{
 
// 1 初始化
 /*  初始化有多种方式 
     1.通过 字符串常量初始化
  2.通过 = 赋值初始化 
 
*/
 _LIT(KBufInit1,
"Hello");
 _LIT(KBufInit2,
"world");
 _LIT(KEnter,
"\n");
 TBuf
<KMaxLength> buf1(KBufInit1);
 console
->Printf(buf1);
     
 TBuf
<KMaxLength> buf2;
 buf2 
= KBufInit2;
 console
->Printf(buf2);
 console
->Printf(KEnter); 
 
// 2 TBuf 是可读写的
 
// 测试 append
 buf1.Append(buf2);
 console
->Printf(buf1);
 console
->Printf(KEnter);
 
// 字符串常量可以通过添加 (),转成 TDesC类型
 
// 测试 delete
 buf1.Delete(0,KBufInit2().Length());
 console
->Printf(buf1);
 console
->Printf(KEnter);
 
// 测试 insert 
 /*
 insert 是从 nPos 指定位置之前插入的,如下面的在 第2个位置插入,
 insert 的索引是基于 0 的
 
*/
 buf1.Insert(
2,buf1);
 console
->Printf(buf1);
 console
->Printf(KEnter);
 
// 测试截取函数
 /*
  1. left 从左边起得到指定长度的描述符
 
*/
 console
->Printf(buf1.Left(2));
 console
->Printf(KEnter);
 console
->Printf(buf1.Right(3));
 console
->Printf(KEnter);
 console
->Printf(buf1.Mid(1,3));console->Printf(KEnter);
 console
->Printf(buf1.Mid(3));
 console
->Printf(KEnter);
 
//  通过这句能测试出 这些函数的索引是基于 0 的
 console->Printf(buf1.Mid(2,1));
}
void UseTBufC()
{
 _LIT(KBufCInit,
"Hello");
 _LIT(KBufCInit2,
"World");
 _LIT(KEnter,
"\n");
 _LIT(KEnter2,
"\n------\n");
 _LIT(KEnter3,
"\n======\n");
 
// 初始化
 TBufC<KMaxLength> buf1(KBufCInit);
 TBufC
<KMaxLength> buf2;
 buf2 
= KBufCInit2;
 console
->Printf(buf1);
 console
->Printf(KEnter);
 console
->Printf(buf2);
 console
->Printf(KEnter2);
 
// TBufC 是不可以修改的,也就是不提供修改的方法
 
// 可以用 TPtr 来修改对像
 
// 追加对像
 
//TPtr ptr1 = buf1.Des();  // 下面是 TPtr  赋值的另一种形式
 TPtrC ptrc(buf1.Des());    // 测试一下TPtrC
 console->Printf(ptrc);
 console
->Printf(KEnter3);
 
 TPtr ptr1(buf1.Des());
 console
->Printf(ptr1);
 console
->Printf(KEnter);
 ptr1.Append(buf2);
 console
->Printf(ptr1);
 console
->Printf(KEnter2);
     
 
// 删除对像
 ptr1.Delete(3,3);
 console
->Printf(ptr1);
 console
->Printf(KEnter2);
 
// 插入对像
 /*
 由于是基于 0 索引的,所以 1 的索引字符为 e ,则在 e 前面插入
 指定的描述符
    
*/
 ptr1.Insert(
1,buf2);
 console
->Printf(ptr1);
 console
->Printf(KEnter2);
  
 
// 截取方法
 /*
  没有修改,则 TBufC 有截取方法
    
*/
 console
->Printf(buf1.Left(3));
 console
->Printf(KEnter2);
 console
->Printf(buf1.Right(4));
 console
->Printf(KEnter2);
 console
->Printf(buf1.Mid(2,4));
 console
->Printf(KEnter2);
 console
->Printf(buf1.Mid(0,1));
 
}
//  Local Functions
LOCAL_C void MainL(const TDesC& aArgs)
    {
    
//
    
// add your program code here, example code below
    
//
    
//console->Write(_L("Hello, world!\n"));
 UseTBufC();
    console
->Printf(_L("\nCommand line args: \"%S\"\n"), &aArgs);
    }

 

   
总结一下  
TBufC 与 TPtrC  是不可修改的,HBufC  也是不可修改的
对于 TBufC 与 HBufC 可以通过 Des() 方法得到 TPtr 对像,通过 TPtr 对像可以对他们的值进行修改
而 TBuf 是可以修改本身的值的

  1. 初始化
    a>  TBuf<大小> 变量名(字符常量) 其中字符常量是通过 _LIT 来实现的
    b>  TBuf<大小> 变量名(Tbuf变量)    
    注意:不论怎么初始化,一定要保证目标对像有足够的空间来容纳这些数据,如下面的就是错误的
    _LIT(K1,"how are you");
     _LIT(K2,"good morning Mr");
     TBuf<20> b1(K1);
     TBuf<10> b2(b1);
    因为 b2 容纳不了 b1 的数据        
  2. 常用方法
    a> append 添加到末尾
    b> insert 插入到指定的索引前,索引是基于0的
    c> delete 删除从指定位置开始的指定大小的字符 ,索引是基于0的
    d> left   从左边取指定数量的字符
    e> right  从右边取指定数量的字符
    f> mid    从任意位置取指定数量的字符,可以不指定数量,则是从指定位置一直取到末尾
  3. TPtrC 的方法很少,是不是用的少
  4. 其它方法还没有做实验
posted @ 2010-01-07 00:12  zziss  阅读(13052)  评论(0编辑  收藏  举报