4. TBufC<n>的用法

  上面关于TPtrC的使用举例,有助于理解TBufC<n>的用法,不过下面有几个例子是关于如何创建TBufC<n>。

  实例5:-实例化TBufC<N>:

//用文字实例化
_LIT(Ktext, "TestText");
TBufC<10> Buf (Ktext);
//或
TBufC<10> Buf2;
Buf2 = Ktext;
//用现有的TBufC来创建一个新的TBufC
TBufC<10> Buf3(Buf2);

  TBufC<n>一般用于文本数据。对于二进制数据,应显示地使用TBufC8<n>。尽管TBufC<n>意味着数据不能被修改(’C’代表Constant:不变的),但是还有两种方法可以改变数据:

  ·数据可以使用赋值运算符进行替换。

  ·通过使用Des()函数来为缓冲区数据构建一个TPtr可修改的指针描述符。

  让我们看改变TBufC<N>的上下文的第一步。

  实例6:-改变TBufC<N>的上下文:

//测试用的一些文字
_LIT(Ktext , "Test Text");
_LIT(Ktext1 , "Test1Text");
//生成TPtrC
TBufC<10> Buf1 ( Ktext );
TBufC<10> Buf2 ( Ktext1 );
//改变Buf2的上下文
Buf2 = Buf1;
//创建一个空的TbufC并把它赋给Buf1
TBufC<10> Buf3;
Buf3 = Buf1;

  另一种改变TBufC<n>的上下文内容的方式是使用Des()成员函数。这个成员函数使用TPtr成员返回一个TPtr可修改的指针描述符。TPtr的最大长度是TBufC<n>模板参数的值。所有的操作函数都来源于基类TdesC。

  实例7:-使用Des()来改变TBufC<N>的上下文:

_LIT(Ktext , "Test Text");
_LIT(KXtraText , "New:");
TBufC<10> Buf1 ( Ktext );
TPtr Pointer = Buf1.Des();
// 删除最后4个字符
Pointer.Delete(Pointer.Length()-4, 4 );
//现在作相应的长度改变
TInt Len = Pointer.Length();
// 添加一个新串
Pointer.Append(KXtraText);
Len = Pointer.Length();
//要完全改变上面的缓冲区,我们可以使用下面的语句:
_LIT(NewText , "New1");
_LIT(NewText1 , "New2");
TBufC<10> Buf2(NewText);
//改变上下文
Pointer.Copy(Buf2);
//或者直接进行字面复制
Pointer.Copy(NewText1);
//所有上面所做的变化实际上改变了Buf1的上下文

  5. 使用堆描述符HBufC

  当我们不知道描述符中数据的大小时,HBufC是可选用的描述符。这里的’C’代表不变的(constant),这意味着数据是不可改变的,但是它在两种情况下也可以改变,就象对于TBufC<n>的情况所做的改变一样。第一种情况是使用赋值运算符,第二种情况是使用可修改的指针描述符,如使用成员函数时的TPtr。在使用HbufC时,要记住两种情况:

  ·如果你需要把HbufC传递给一个用TDesC&作为参数的函数,你只须简单地取消对HBufC指针的参照即可。

  ·可以通过使用ReAlloc函数来改变堆描述符缓冲区的大小,就象对于TBufC<N>的情况一样.

  实例8:-HbufC的用法:

//创建一个堆描述符,有两种方法
//第一种方法使用New(),NewL()或NewLC()之一
//让我们看一个例子.这里将构建一个HbufC:所用数据空间为15,但是当前大小是0
HBufC * Buf = HBufC::NewL(15);
// 第二种方法使用
// 现有描述符的Alloc(), AllocL(), 或AllocLC()方法。这个新的堆描述符用描述符的内容自动初始化
_LIT (KText , "Test Text");
TBufC<10> CBuf = KText;
HBufC * Buf1 = CBuf.AllocL();
// 我们检查一下大小和长度。这里大小是18,而长度是9
TInt BufSize = Buf->Size();
TInt BufLength = Buf->Length();
// 改变HbufC的指向
_LIT ( KText1 , "Text1");
//使用赋值运算符来改变指向KText1的缓冲区
*Buf1 = KText1;
// 下面通过可修改的指针描述符来改变 数据
TPtr Pointer = Buf1->Des();
Pointer.Delete( Pointer.Length() - 2, 2 );
// 所有能对 TBufC<n> 进行的操作在些都可用
//下面是一个这样的操作
_LIT ( KNew, "New:");
Pointer.Append( KNew );

  6. TPtr的用法

  我们使用它来取代TBufC<N>和HBufC,因为我最了解它。因此,让我们先记住如何创建TPtr。

  ·用另一个TPtr。

  ·从TBufC<N>,或者通过成员函数Des()使用HbufC来创建。

  ·从一个指向内存的外部指针并指定最大长度。

  ·从一个指向内存的外部指针并指定数据及其最大长度。

  实例9:-TPtr的用法:

//先让我们看一下两种取得TPtr的方法
_LIT(KText, "Test Data");
TBufC<10> NBuf ( KText );
TPtr Pointer = NBuf.Des();
//第一种方法
TPtr Pointer2 ( Pointer );
//第二种方法使用一个内存区段,用于存储数据和最大长度
TText * Text = _S("Test Second");
TPtr Pointer3 ( Text ,11, 12);
// 现在我们看一下,怎么用TPtr 替换数据,这完全可以通过
//赋值运算符或拷贝函数来实现
_LIT(K1, "Text1");
_LIT(K2, "Text2");
Pointer2 = K1; // 数据是Text1
Pointer.Copy(K2); // 数据是Text2;
// 我们还可以改变数据的长度或把它设置为0
Pointer2.SetLength(2); // 只剩下 Te两个字符
Pointer2.Zero(); // 把长度设置为0
//可以使用delete 函数来更改数据,如前面的例中所示


  7. TBuf<n>的用法

  在这个数据结构中,其中的数据并不是固定不变的。运算、实例化和赋值都与TBufC<n>一致;对于它的修改操作,与TPtr一致,象复制、删除、赋值等等。我想这一部分就不用再给出例子了。

 

CTIC.川科创新 3G嵌入式技术教育专家(3G送手机)

3G手机软件工程师培训 现热招中 报名即 送3G手机 一部

咨询电话:400-702-8828   (028)6862 6028

网址: www.ctic.cc 

posts - 41, comments - 14, trackbacks - 0, articles - 2

Copyright © Learn