`
unblue2008
  • 浏览: 12645 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
最近访客 更多访客>>
社区版块
存档分类
最新评论

Symbian Descriptors的使用

阅读更多
任何Symbian的开发者都要对Descriptors 有所了解,因为在这里,无论是普通文本还是二进制数据,都要用到它,开发任何的应用软件,游戏或多媒体程序,也都要接触到它,在这里做个简单的介绍,自己也能重温并学习一下。 以下内容摘自newlc的数篇经典文章,整理后也会加入了自己的一些内容和观点。
相关类的使用
1、TPtrC<n>的使用
它指向了一组数据,但没有包含处理方法。它是从TDesC中直接继承下来的,只包括从父类中继承的那些函数,以及它自身的构造和设置函数。 如何为使用这个对象呢?有如下几种方式:
生成一个空的TPtrC对象,并使用Set()函数将它指向一组数据。
void Set(const TDesC16& aDes);
在构造它时,就将数据传递进去。
例1:用TBuf和TBufC构造出TPtrC对象。
_LIT(KText , "Test Code");
TBufC<10> Buf ( KText );//或者为 TBuf<10> Buf ( KText );
// Creation of TPtr using Constructor
TPtrC Ptr (Buf);
// Creation of TPtr using Member Function
TPtrC Ptr1;
Ptr1.Set(Buf);

例2:用TText*构造TPtrC
TText * text = _S("Hello World\n");
TPtrC ptr(text); 
// 或者
TPtrC Ptr1; 
Ptr1.Set(text);
//如果要存储TText的一部分数据,我们使用下列方法
TPtrC   ptr4 ( text , 5 );

例3:从另一个TPtrC中构造TPtrC
TText * text = _S("Hello World\n");
TPtrC ptr(text);// 从一个TPtrC中获得另一个TPtrC
TPtrC p1(ptr); 
// 或
TPtrC p2; 
p2.Set(ptr);

例4:从TPtrC中获得TText*
// Set the TPtrC
_LIT(KText , "Test Code");
TBufC<10> Buf ( KText ); 
TPtrC    Ptr1 (Buf);
// 获得TText *
TText * Text1 = (TText *)Ptr1.Ptr();
//使用Ptr()方法即可
//从SDK里看到的是const TUint16* Ptr() const;
//然后又能找到typedef unsigned short int TText16;
//呵呵所以说这里可以直接给TText

2、TBufC<n>的使用
例1:
// 直接从字符串中构造_LIT(Ktext, "TestText");
TBufC<10> Buf (Ktext);
// 或
TBufC<10> Buf2;
Buf2 = Ktext;
// 从已有的对象中生成新的TBufC
TBufC<10> Buf3(Buf2);

TBufC<n>一般用来存储文本数据,而TBufC8<n>则用来存储二进制数据。尽管这里的对象表示数据是不能被修改的(因为有个后缀C代表 了常量的意思),但仍然有两种方式可以用来修改数据:

这里的数据可以用赋值的方式替换掉。
使用Des()函数构造出一个TPtr对象,这样就可以用它来修改数据

下面是例子: 例1:
_LIT(Ktext , "Test Text");        
_LIT(Ktext1 , "Test1Text");
TBufC<10> Buf1 ( Ktext );
TBufC<10> Buf2 ( Ktext1 );
// 通过赋值的方式改变数据
Buf2 = Buf1;
TBufC<10> Buf3;
Buf3 = Buf1;


例2:通过使用Des()改变TBufC的数据
_LIT(Ktext , "Test Text");
_LIT(KXtraText , "New:");
TBufC<10> Buf1 ( Ktext );
TPtr Pointer = Buf1.Des();
// 删除后四个字符
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);

总结,这里TBufC时,我们通过Des()获得TPtr对象,因此获得了从TDes继承的一系列管理数据的方法。很好:)

3、HBufC的使用
当我们不知道数据大小时,我们可以使用它来处理,这里的C表示它是个常量,但同样有两种方式来修改它的数据。第一个是使用赋值 操作,另一个也是使用可修改指针型Descriptor,如TPtr。

注意其大小可以通过ReAlloc函数来重新分配。
//有两种方式来生成一个Heap Descriptor
//第一种方式用New(),NewL(),或NewLC()
//如下操作便可以构建一个存放数据的空间,空间为15,不过目前大小为0
HBufC * Buf = HBufC::NewL(15);        
//第二种方式是采用Alloc(),AllocL()或AllcLC()来处理,不过这是已綺存在的数的
//管理方式。新的Heap Descriptor可以自动的根据这个内容来构造。
_LIT (KText , "Test Text");
TBufC<10>  CBuf = KText;
HBufC * Buf1 = CBuf.AllocL();           
//下面是通过赋值方式改变其数据的方法
_LIT ( KText1 , "Text1");
*Buf1 = KText1;        
// 通过可修改指针来改变数据的方式
TPtr Pointer = Buf1->Des();
Pointer.Delete( Pointer.Length() - 2, 2 ); 
//这样我们添加删除数据了:)
_LIT ( KNew, "New:");
Pointer.Append( KNew );


4、TPtr的使用
通过上面的介绍,我们已经看到它的使用方式,这里可以看看如何来构造它:

通过另一个TPtr对象
通过TBufC,HBufC的Des()方法获取
通过内存中的确定指针和大小长度来生成
// 通过TBufC来生成
_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数据的方式:赋值和Copy()方法     
_LIT(K1, "Text1");
_LIT(K2, "Text2");         
Pointer2 = K1; // Data will be Text1
Pointer.Copy(K2); // Data Will be Text2; 
// 可以改变数据的大小,并置0
Pointer2.SetLength(2); // 只有"Te"了呵呵


5、TBuf<n>的使用
这个对象的操作和从TBufC<n>中通过获得TPtr对象的进行的数据操作一样,可以Copy,Delete和赋值等。

6、描述符主要特性
以同样的方式对待字符串和二进制数据。
数据可以存放在内存的任何区域上——ROM或RAM,在堆或栈上都可以。
描述符使用指针和长度信息来描述它包含的数据,有些描述符还包括最大长度的信息。

所有的描述符都是从抽象类TDesC中派生的,他们可以分为三个大类:
缓冲区描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在程序的堆栈中:TBuf和TBufC,
堆描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在堆中:HBufC,
指针描述符——描述符对象和它所表示的实际数据是分开存放的:TPtr和TPtrC.

如果对照C/C++语法来看:
TPtrC可以被看作是const char*的使用
TBufC可以被看作是char[]的使用
其他类没有相应对照语句。

TDes和TDesC是抽象类,因此你不可能实例化它们。它们的主要用途是做为函数的参数来描述字符串和二进制数据。在这样的函数中,你应该按如下规则使用: 1、const TDesC& 表示只读的数据和字符串。 2、TDes& 表示可以被修改的数据和字符串。 (我们所看到大多数涉及Descriptor参数的函数和方法都使用了他们来描述)

7、Litterals
字符串常量可以使用_L()或_LIT()宏来定义。

_L()可以生成一个指向字符值的地址(TPtrC),它綺常被用来传递字符串到函数中:
NEikonEnvironment::MessageBox(_L("Error: init file not found!"));

_LIT()可以生成个常量名,以便以后重复使用:
_LIT(KMyFile, "c:\System\Apps\MyApp\MyFile.jpg");

_LIT()宏的结果(就是上面的KMyFile)实际上是个文字描述符(literal descriptor)TLitC,它可以在任何使用TDesC&的地方使用。

用法 :
TDesC中最常用的函数如下:

Ptr(),用来获得描述符数据中的指针。
Length(),用来获得描述符数据中的字符数。
Size(),用来获得描述符数据中的字节数目。
Cpmpare()或操作符==、!=、>=和<=等专为比较描述符数据用的。
操作符[],可以被当作c/c++中一样,用来获得描述符字符串中的单个字符。
分享到:
评论

相关推荐

    Symbian_OS_Descriptors_For_Text_And_Binary_Data_With_Example

    在提供的资源中,"Symbian_OS_Descriptors_For_Text_And_Binary_Data_v1_0_en.pdf"很可能包含了详细的描述符使用指南和示例。而"DescriptorEx.zip"可能包含了一些实际的代码示例,演示如何在Symbian应用中使用描述符...

    Symbian C++手机编程中字符串处理

    在Symbian C++手机编程中,字符串处理与标准C/C++有所不同,主要是因为Symbian OS使用了一种称为描述符(Descriptors)的机制来安全高效地管理字符串和二进制数据。描述符是一种内建的数据结构,它可以是常量或可变...

    symbian描述符使用范例

    在Symbian操作系统中,描述符(Descriptors)是一种高效的数据管理机制,主要用于处理字符串和内存块。它们在系统层面上提供了对内存的低级访问,从而优化了性能和内存使用。本文将深入探讨Symbian中的TBuf、TPtr、...

    Symbian OS 架构介绍

    Symbian C++具有一系列独特特性,如叶子类(Leaves)、清理机制(Cleanup)、描述符(Descriptors)和活动对象(ActiveObject),这些特性旨在提高程序的健壮性和资源管理效率。Symbian OS历经多个版本迭代,从v6.0...

    ym.rar_doc_symbian_symbian s60

    描述中的“Symbian S60 S ymbian S60 Symbian S60描述符的用法.doc”明确指出,压缩包内主要文档是关于Symbian S60平台中描述符(Descriptors)的使用方法。在Symbian操作系统中,描述符是一种机制,用于高效地管理I...

    SymbianOS中的描述符.doc

    在Symbian操作系统中,描述符(Descriptors)是用于高效管理字符串的重要机制。字符串在Symbian中被称为Descriptor,它们可以存在于RAM或ROM中,因此系统提供了多种类型的字符串类以适应不同的需求和内存管理策略。 ...

    Symbian实践培训讲义

    Descriptors是Symbian OS中处理数据缓冲区的一种高效方式,它允许开发者更有效地管理内存资源。此外,动态数组和活动对象的概念也是Symbian开发中的重要组成部分,前者简化了动态大小数组的处理,后者则支持异步操作...

    北航Symbian OS C++实践培训讲义

    北航Symbian OS C++实践培训讲义涵盖了Symbian操作系统(OS)和C++编程语言的移动应用开发相关知识点,内容详细全面,旨在向开发者介绍如何使用Symbian平台进行移动应用的开发。以下是根据提供的内容总结的知识点: ...

    symbian很好的入门教程 北航张锦峰主讲

    内存管理和Descriptors是移动应用开发中的重要部分,教程详细讲解了如何有效地管理内存和使用Descriptors来处理数据。动态数组和活动对象的概念也在此讲解,这些是Symbian OS中实现高效编程的关键工具。 GUI编程...

    SymbianOS中的描述符.txt

    对于更深入地了解SymbianOS描述符的使用方法和最佳实践,建议查阅官方提供的SDK文档: - **Symbian Developer Library**: - API Reference - C++ API reference - Descriptors - **SDK Help**: - Developer ...

    symbian s60开发ppt

    5. **描述符(Descriptors)**:描述符是Symbian中处理文本数据的核心机制。它们是高效的数据结构,可以用于存储和操作字符串,提供了灵活的内存管理和高效的文本操作。 6. **四种创建对象的方式**:Symbian支持四...

    Symbian OS Architecture(PPT演示) by Lance Li

    通过采用先进的技术理念和设计模式,Symbian OS不仅为用户提供了优秀的使用体验,也为开发者提供了广泛的开发工具和支持。虽然随着时间的推移,Symbian OS面临着来自其他操作系统日益激烈的竞争,但它依然是移动设备...

    Symbian描述符详解文档

    在Symbian操作系统中,描述符(Descriptors)是用于高效管理内存的一种机制,特别是处理字符串和缓冲区时。本文档将深入探讨Symbian中的两种主要描述符类型:TBufC和TBuf。 首先,TBufC是常量文本描述符,它不支持...

    Addison.Wesley.Developing.Series.60.Applications.A.Guide.for.Symbian.OS.C++.Developers

    - **Descriptors**: 描述符的概念和使用方法。 - **Collection Classes**: 集合类的介绍。 - **Using Asynchronous Services with Active Objects**: 如何使用异步服务与主动对象相结合。 - **Files, Streams and ...

    symbian 描述符

    Symbian操作系统中,描述符(Descriptors)是一种特殊的数据结构,用于高效地处理字符串和二进制数据。它们替代了C语言中以NULL结尾的字符串,具有更强大的功能和优化的性能。诺基亚官方培训笔记中详细阐述了Symbian...

    在Visual C++调试器中显示Symbian字符串和描述

    Symbian Strings & Descriptors TDes16=&lt;,t&gt;length=max=TDesC16=&lt;,t&gt;length= TPtr(length)=max=ptr= TPtr16(length)=max=ptr= TPtrC(length)=ptr= TPtrC16(length)=ptr= TBuf&lt;*&gt;=length=max=buf= TBufC&lt;*&gt;=length=...

    使用Symbain OS字符串描述符

    阅读"Using-Symbain-OS-String-Descriptors.pdf"这份文档,你将能更深入地学习到描述符的使用技巧和最佳实践,这对于任何Symbian开发者来说都是不可或缺的知识。 总之,Symbian OS的字符串描述符是其平台的一大特色...

Global site tag (gtag.js) - Google Analytics