当前位置: 首页 > news >正文

合肥企业网站建设哪个好/厦门人才网最新招聘信息网

合肥企业网站建设哪个好,厦门人才网最新招聘信息网,律师网站素材,网站建设的仿站Introduction描述符(Descriptors)封装了字符串和二进制数据,用于替代C中的以NULL结尾的字符串。它的长度和数据都封装在了描述符中,Symbian API中用的都是描述符。如:TPtrC ptr (KHelloWorld); CEikonEnv::Static()->InfoMsg(ptr);Main Ty…

Introduction

描述符(Descriptors)封装了字符串和二进制数据,用于替代C中的以NULL结尾的字符串。它的长度和数据都封装在了描述符中,Symbian API中用的都是描述符。如:

TPtrC ptr (KHelloWorld); CEikonEnv::Static()->InfoMsg(ptr);

Main Types of Descriptors

主要可以分为以下几类,其中带C的是不可修改的。

  • Abstract:(TDes、TDesC),其他描述符的基类,不能实例化,一般用作函数的参数。
  • Literal:(TLitC,_LIT()),用于存储literal string,一般使用后者。
  • Buffer:(TBuf,TBufC),数据存储于栈上,大小在编译时确定。
  • Heap:(HBufC),数据存储于堆上,大小在运行时确定。
  • Pointer:(TPtr,TPtrC),引用存储于类之外的数据

Descriptor Modification

描述符可以是可修改的和不可修改的,通常带C的都是不可修改的,不可修改的是可修改的基类。

  • Moidfiable:提供了访问和修改数据的API,如TBuf
  • Non-Modifiable:数据只可以被访问,不可修改。但是通过Des()函数可返回一个可修改的指针

Descriptor Width

在描述符类后加上8或者16影响了存储在描述符中的数据的宽度,默认是16位的,处理二进制或ASCII时采用8位。

  • 8位:(TDesC8),用于二进制数据或者ASCII字符串
  • 16位:(TDesC16),默认,Unicode

下面开始对上述5类描述符进行详细介绍,首先看一下类继承关系

2006113022127808.jpg

这里显示的是8位的,16位默认的类继承关系与此一致

Abstract Descriptors

除Literal外的所有描述符的基类,提供了基本的接口和基础功能。他们本身不能实例化,一般用作函数参数。

TDesC:提供了比较、复制、搜索、提取部分字符串的函数。

TInt TDesCUtil::SumLengths(const TDesc& aDesC1, const TDesc& aDesC2)
{
return aDesC1.Length() + aDesC2.Length();
}

TDes:继承自TDesC,添加了许多用于修改数据的函数。其最大长度是描述符被创建时确定的。

TInt TDesCUtil::AppendL(TDesc& aTarget, const TDesc& aDesC)
{
TInt sumLen = aTarget.Length() + aDesC.Length();
if (aTarget.MaxLength() < sumLen)
{
User::Leave(KErrOverflow);
}
aTarget.AppendL(aDesC);
}

Literal Descriptors

提供了一种将字符串放在只读存储空间中的机制(实际存放在程序的数据区,而不是真的在ROM中)。一般不采用TLitC而直接采用_LIT()宏。 _LIT(KHelloWorld, "Hello World!");

通过()操作符可以得到 const TDesC&。 TInt length = KHelloWorld().Length();

在函数参数为const TDesC&可以直接使用KHelloWorld。iLabel->SetTextL(KHelloWorld);

Buffer Descriptors

将数据作为本身的一部分存储在stack上,他们的最大长度是在编译时确定的。

TBuf<16> helloWorld = KHelloWorld;
TInt len = KHelloWorld().Length();
helloWorld[len-1]='?';

在内存中如下所示:

2006113022127853.jpg

TBufC的用法如下:

_LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC buf;
TInt currentLen = buf.Length(); // == 0
buf = KHelloWorld;
currentLen = buf.Length(); // == 11
TText ch = buf[2]; // == 'l'

TBuf的用法如下:

const TInt bufLen = 6;
TUInt8 objType = 1;
TUInt8 objId = 1;
TUInt8 xCoord = 128;
TUInt8 yCoord = 192;
....
TBuf8 buf;
buf.Append(objType);
buf.Append(objId);
...
//we can now do something with the buffer such as writting it to a binary file or send via socket.

Pointer Descriptor

用于引用存储在其他地方的数据,如:

const unsigned char KBuffer[ ] = {0x00, 0x33, 0x66, 0x99, 0xbb, 0xff};
TPtrC8 bufferPtr( KBuffer, sizeof(KBuffer));
iSocket.Write(bufferPtr, iStatus);

在内存中如下所示:

2006113022127890.jpg

TPtr的用法:

_LIT(KHelloWorld, "Hello World");
const TInt maxBuf = 32;
TBufC buf;
buf = KHelloWorld;
TPtr ptr = buf.Des();
ptr[7] = 'a'; ptr[8] = 'l'; ptr[9] = 'e'; ptr[10] = 's';
CEikonEnv::Static()->InfoMsg(ptr); // "Hello Wales"

Heap Descriptors

动态在堆(heap)上分配,通过HBufC的API,数据可以被set和reset,但是不能被修改。如:

HBufC* heapBuf = HBufC::NewL(KHelloWorld().Length());
*heapBuf = KHelloWorld();
delete heapBuf;

在内存中的情况如下图所示:

2006113022127719.jpg

HBufC通常在以下几种情况下使用:

  • 在运行时从资源文件中加载字符串
  • 从用户界面中接收用户输入的字符串
  • 从应用程序引擎中接收字符串,如contacts database中的名字

对HBufC中的内容进行修改:

_LIT(KHello, "Hello!");
_LIT(KWorld, "World!");
HBufC* heapBuf = HBufC::NewL(KHello().Length());
*heapBuf = KHello; //buf holds "Hello!"

heapBuf = heapBuf->ReAllocL(KHello().Length() + KWorld().Length());
CleanupStack::PushL(heapBuf);

TPtr ptr (heapBuf->Des()); //DON'T use TPtr ptr = heapBuf->Des(); this will set maxlen to 6 but not 12...
ptr[KHello().Length() - 1] = ' ';
ptr += KWorld;
iTopLabel -> SetTextL(ptr);
CleanupStack::PopAndDestroy();
DrawNow();

下面介绍Descriptors的具体用法:

Non-Modifying Methods

Length(),Size(),Left(),Right(),Mid(),Compare(),Locate(),LocateReverse (),Find(),Match()等。以下代码示例描述了如何在一个descriptor中找到<>中的内容,如果不存在,返回整个字符 串:

static const TUint KAddressStartChar = 'static const TUint KAddressEndChar = '>';

TPtrC ExtractAddressNumber( const TDesC& aAddressString)
{
TInt addrStart = aAddressString.Locate(KAddressStartChar ) + 1;
TInt addrEnd = aAddressString.LocateReverse(KAddressEndChar ) ;
if ((addrStart == KErrNotFound) || (addrEnd == KErrNotFound) || (addrStart >= addrEnd) )
{
addrStart = 0;
addEnd = aAddressString.Length();
}
return (aAddressString.Mid(addrStart, (addrEnd - addrStart) ) );
}

Modifying Methods

Zero(),Copy(),Num(),Format(),Insert(),Replace(),Delete(),


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126030/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126030/

http://www.jmfq.cn/news/5266225.html

相关文章:

  • 做网站需要什么电脑配置/深圳做网站
  • wordpress 内容摘要/牛排seo
  • 封面型网页网站有哪些/宁波百度seo点击软件
  • 乳山网站开发/百度权重划分等级
  • 管理网站怎么做的/谷歌浏览器网页版
  • 公司网站模板最新/夸克搜索引擎入口
  • 如何选择武进网站建设/石家庄seo关键词
  • 做网站需要什么专业/站长工具域名
  • 电脑网站建设策划书/网络推广都有哪些方式
  • 网站信息推广的策略有哪些/百度平台商家联系方式
  • 做yield网站多少钱/上海搜索推广
  • 英文网站建设目的/山东seo
  • 学美工大概要多少学费/站长网站优化公司
  • 手机wap版网站制作/网页制作的软件有哪些
  • 怎样做网站的背景图片/天津seo外包
  • 西安企业网站建设哪家好/外链代发软件
  • 新乡网站建设waterseo/seo推广软件排行榜前十名
  • 网页设计教程完整/西安网站seo哪家公司好
  • 合肥电商网站开发/青海seo技术培训
  • 太原做网站的/软件开发流程八个步骤
  • 做网站的编程语言/5118网站如何使用免费版
  • 网站建设gongsi/seochinaz查询
  • 南宁良庆网站建设/宁波seo网络推广咨询价格
  • 网站结构是什么 怎么做/品牌营销活动策划方案
  • html网页制作下载/seo网络优化专员是什么意思
  • 怎么做网站底部文件/百度推广登录账号首页
  • wordpress网站更换域名/在线crm
  • thinkphp做的网站怎么预览/可以免费打开网站的软件
  • 饰品公司网站建设方案/广州企业网站建设
  • 他达拉非片和西地那非片的区别/seo单页快速排名