symbian 缓冲 字符串

来源:互联网 发布:微贷网逾期数据统计 编辑:程序博客网 时间:2024/05/18 00:39

1.各种描述符类的区别在于数据缓冲是如何存储和引用的,以及缓冲的数据宽度和缓冲是否可以修改等。

2.字符串与二进制数据缓冲都被视为具有指定长度的数据缓冲,字符串通常存储于16位描述符中,而二进制数据则通常存储于8位描
 
  述符中。

3._L宏与_LIT宏相像,不同之处在于,_L宏没有像_LIT宏那样分配一个中间常量,而运行到_L时,构建并分配一个临时的TPtrC对象
 
  。这就是_L效率低于_LIT的原因(记住:_LIT不包含运行时初始化),但是_L宏有一个好处就是它的方便:比如调用函数时直接: 
 
  makeName(_L("Yun Jie"));


4.有十种描述符可提供给程序员用:它们可以分为3种:缓冲,指针和堆. 即:TBuf和TBufC,TPtr和TPtrC,HBufC;
 
  将字符C附加到上述类名称中,表示该描述符不可修改.  也就是说缓冲和指针都可修改和不可修改两种类型,而堆就只有不可修改一
 
  种类型.

5.TDes和TDesC是描述符的基类,它们包含在描述符的数据缓冲上进行操作的所有方法;

  TDes继承自TDesC,所有可修改的类都继承自TDes,所有不可修改的类都直接继承自TDesC;

6._LIT(KMyString,"My string"):定义了文字KMyString,用于引用"My string",可以把KMyString当成一个不可修改的描述符用--可
 
  以将它传递给接受TDesC参数的函数,还可以把分配级TDesC指针,如果使用()运算符的话,甚至可以直接调用描述符方法.

7.TBuf在存储的类型值为3,而且还存储了当前长度,最大长度和当前的字符串;

  TBufC在存储结构上则比TBuf少存储了最大长度的值,还要提一下的就是TBufC不可修改,但可以用另外一个值来赋值.

8.指针类型的存储结构和缓冲类型的存储结构基本相同,只是在存储当前字符串的地方存储的是一个指向外部的存储当前字符串的指
 
  针.

9.堆类型的描述符就只有HBufC类型而已,是一个在堆上分配的描述符,它作为指针来引用,有一种方法可以修改它:

  如下例:

        _LIT(KString1,"Test");
 _LIT(KString2,"My Heap String");
 
 HBufC* myHeapDes=HBufC::NewL(KString1().Length());
 
 CleanupStack::PushL(myHeapDes);
 *myHeapDes=KString1;
 
 _LIT(KFormat1,"myHeapDes=/"%S/"length=%d/n");
 console->Printf(KFormat1,myHeapDes,myHeapDes->Length());
 
 myHeapDes->ReAlloc(KString2().Length());
 
 *myHeapDes=KString2;
 console->Printf(KFormat1,myHeapDes,myHeapDes->Length());
 
 TPtr myPtr=myHeapDes->Des();
 
 _LIT(KString3,"Hello");
 _LIT(KString4,"!!!");
 
 myPtr.Copy(KString3);
 myPtr.Append(KString4);
 
 _LIT(KFormat2,"myHeapDes=/"%S/"length=%d myPtr=/"%S/"length=%d/n");
 console->Printf(KFormat2,myHeapDes,myHeapDes->Length(),&myPtr,myPtr.Length());
 CleanupStack::PopAndDestroy(myHeapDes);

   输出:
        myHeapDes="Test" length=4
        myHeapDea="My Heap String" length=4
        myHeapDes="Hello!!!" length=8 myPtr="Hello!!!" length=8


   可以使用返回的指针来达到对其中数据的修改. 在输出行的最后中,TPtr和HBufC描述符的长度被更新,而且它们都指向同一个已经

   修改的数据.(一起更新)