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 是可以修改本身的值的
- 初始化
a> TBuf<大小> 变量名(字符常量) 其中字符常量是通过 _LIT 来实现的
b> TBuf<大小> 变量名(Tbuf变量)
注意:不论怎么初始化,一定要保证目标对像有足够的空间来容纳这些数据,如下面的就是错误的
_LIT(K1,"how are you");
_LIT(K2,"good morning Mr");
TBuf<20> b1(K1);
TBuf<10> b2(b1); - 常用方法
a> append 添加到末尾
b> insert 插入到指定的索引前,索引是基于0的
c> delete 删除从指定位置开始的指定大小的字符 ,索引是基于0的
d> left 从左边取指定数量的字符
e> right 从右边取指定数量的字符
f> mid 从任意位置取指定数量的字符,可以不指定数量,则是从指定位置一直取到末尾 - TPtrC 的方法很少,是不是用的少
- 其它方法还没有做实验