Symbian字符串操作.docx
- 文档编号:24435075
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:38
- 大小:89.01KB
Symbian字符串操作.docx
《Symbian字符串操作.docx》由会员分享,可在线阅读,更多相关《Symbian字符串操作.docx(38页珍藏版)》请在冰豆网上搜索。
Symbian字符串操作
Symbian字符串操作
在symbian系统中并没有使用我们熟知的类型和函数来处理字符串和二进制缓冲区,这对于初学者来说可能有点陌生。
大概很多编程者都在摸索TBuf,TBufC,HBufC的过程中花费了不少时间……:
)
symbian中的描述符(descriptors)主要有以下特性:
1、以同样的方式对待字符串和二进制数据。
2、数据可以存放在内存的任何区域上——ROM或RAM,在堆或栈上都可以。
3、描述符使用指针和长度信息来描述它包含的数据,有些描述符还包括最大长度的信息。
下面这个图示意了描述符相关类的继承关系:
所有的描述符都是从抽象类TDesC中派生的,他们可以分为三个大类:
1、缓冲区描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在程序的堆栈中:
TBuf和TBufC,
2、堆描述符——数据做为描述符对象的组成部分而存在,描述符对象存放在堆中:
HBufC,
3、指针描述符——描述符对象和它所表示的实际数据是分开存放的:
TPtr和TPtrC.
如果对照C/C++语法来看:
1、TPtrC可以被看作是constchar*的使用
2、TBufC可以被看作是char[]的使用
其他类没有相应对照语句。
下面显示了各个类中数据是如何组织的:
TDes和TDesC是抽象类,因此你不可能实例化它们。
它们的主要用途是做为函数的参数来描述字符串和二进制数据。
在这样的函数中,你应该按如下规则使用:
1、constTDesC&表示只读的数据和字符串。
2、TDes&表示可以被修改的数据和字符串。
所有这些描述符都可以指定数据尺度:
TDes8、TDes16、TDesC8、TDesC16、TBuf8、TBuf16等
这里8表示描述符处理的数据是8bit的,而16表示是16bit数据。
一般来说,你只要使用通用形式(TDes,TDesC,...)来表示文本数据而使用8bit版本(TDesC8等)来表示二进制的内容。
Litterals
---------------
字符串常量可以使用_L()或_LIT()宏来定义。
_L()可以生成一个指向字符值的地址(TPtrC),它经常被用来传递字符串到函数中:
NEikonEnvironment:
:
MessageBox(_L("Error:
initfilenotfound!
"));
_LIT()可以生成个常量名,以便以后重复使用:
_LIT(KMyFile,"c:
\System\Apps\MyApp\MyFile.jpg");
_LIT()宏的结果(就是上面的KMyFile)实际上是个文字描述符(literaldescriptor)TLitC,它可以在任何使用TDesC&的地方使用。
用法
---------
TDesC中最常用的函数如下:
1、Ptr(),用来获得描述符数据中的指针。
2、Length(),用来获得描述符数据中的字符数。
3、Size(),用来获得描述符数据中的字节数目。
4、Cpmpare()或操作符==、!
=、>=和<=等专为比较描述符数据用的。
5、操作符[],可以被当作c/c++中一样,用来获得描述符字符串中的单个字符。
下面几个函数有其特殊性:
1、Append()和Num()有很多重载形式,具体可以看SDK
2、Compare()有2个变体:
CompareC()和CompareF(),以及Copy(),Find(),Locate()和Match(),这些函数都有C/F的后缀形式,C代表Collated而F代表Folded.
Collating和Folding
------------------------
Folding是个比较格式化文本的简单方法,主要用在对比较不是太要求精确的场合。
Collation是个更好的也更有效的比较字符串的方法,可以生成类似字典的顺序。
Symbian基本规范:
描述符
概要
描述符既是SymbianOS中基本的东西,同时也是比较非面向对象(non-OO)和面向对象(OO)设计方法的极好的例子。
在C语言中字符串是下面这样的:
char*hello=“hello”;
上面的语句使设置一些内存使其包含‘h’,‘e’,‘l’,‘l’,‘o’,‘\0’6个字符。
strlen()函数从开始字节扫描内存直到以空字符(‘\0’)结尾。
如果你想扩展字符串,你需要知道给它分配了多少内存。
描述符抽象
通过两个抽象类表示出字符串的基本需要:
TDesC和TDes。
TDesC是常量的或者说不可修改的描述符,它包含有地址和长度信息。
在下面的情况下可以使用这个类:
需要对数据做许多操作但不需要更改它,因此TDesC提供了许多不修改数据的函数。
TDes是可修改的描述符,它另外包含有最大长度信息,它允许数据扩展或减小(只要不超过最大长度),因此,TDes提供许多可以修改数据的函数。
描述符的基本特征是修改操作不可以超出已经分配的长度,但有一些类允许这样做,例如CBufBase和它的派生类。
如果一个TDes函数引发溢出将会产生系统错误(panic)。
因为TDesC和TDes包含了所有函数需要的访问、操作字符串和内存数据的功能,所以许多只需要访问数据的函数用constTDesC&做为参数,那些需要修改数据的函数用TDes&做为参数。
指针描述符
抽象描述符类有多种实现,其中最简单的就是指针描述符。
TPtrC仅仅包含长度与地址信息:
它只需要两个机器字来表示。
TPtrC可以被设置为表示任何现存的数据。
TPtr增加了最大长度信息,因此它可以用来表示那些未完全分配的缓冲区(buffer)。
图
TPtrC和TPtr与C语言中的char*有点儿类似,但因为描述符自己包含了长度信息,所以不再需要扫描结尾的空字符(‘\0’)或为它分配空间。
缓冲器描述符
缓冲器描述符TBufC和TBuf中的数据就是自己的一部分,就像C语言中的字符数组(char[])。
图
这种描述符使用C++的模板机制,通过一个整数参数指出缓冲器长度。
堆描述符
堆描述符HbufC包含的数据是存放在堆上的。
图
这就像C语言中的(char*)malloc(length+1)一样通常用于预先不能确定长度的情况。
因为是在堆上分配的,它总是通过HBufC*使用而不是直接定义HBufC对象。
描述符类
下面是完整的描述符类层次图:
上图体现出了使用面向对象的优雅性。
TBufCBase只是为了考虑实现的方便性,这也是面向对象中常有的习惯(然而它需要小心使用)。
描述符使得表示串行数据变的简单。
当描述符用于字符串时,应该使用TDes(TDesC,TBuf…)等等,因为在Unicode编译条件下,这些类通过typedef定义为TDes16(TDesC16,TBuf16…)等等。
因为描述符可以包含任何数据,包括空字符,所以它可以被用来引用字节数据和普通缓冲器。
在需要8位数据的情况下(无论是什么编译条件,有可能是Unicode编译条件),你应该总是直接使用TDes8等形式。
symbianos错误代码
GenericErrors
KErrNone
0
KErrNotFound
-1
Unabletofindthespecifiedobject
KErrGeneral
-2
General(unspecified)error
KErrCancel
-3
Theoperationwascancelled
KErrNoMemory
-4
Notenoughmemory
KErrNotSupported
-5
Theoperationrequestedisnotsupported
KErrArgument
-6
Badrequest
KErrTotalLossOfPrecision
-7
Totallossofprecision
KErrBadHandle
-8
Badobject
KErrOverflow
-9
Overflow
KErrUnderflow
-10
Underflow
KErrAlreadyExists
-11
Alreadyexists
KErrPathNotFound
-12
Unabletofindthespecifiedfolder
KErrDied
-13
Closed
KErrInUse
-14
Thespecifiedobjectiscurrentlyinusebyanotherprogram
KErrServerTerminated
-15
Serverhasclosed
KErrServerBusy
-16
Serverbusy
KErrCompletion
-17
Completionerror
KErrNotReady
-18
Notready
KErrUnknown
-19
Unknownerror
KErrCorrupt
-20
Corrupt
KErrAccessDenied
-21
Accessdenied
KErrLocked
-22
Locked
KErrWrite
-23
Failedtowrite
KErrDisMounted
-24
Wrongdiskpresent
KErrEof
-25
Unexpectedendoffile
KErrDiskFull
-26
Diskfull
KErrBadDriver
-27
Baddevicedriver
KErrBadName
-28
Badname
KErrCommsLineFail
-29
Commslinefailed
KErrCommsFrame
-30
Commsframeerror
KErrCommsOverrun
-31
Commsoverrunerror
KErrCommsParity
-32
Commsparityerror
KErrTimedOut
-33
Timedout
KErrCouldNotConnect
-34
Failedtoconnect
KErrCouldNotDisconnect
-35
Failedtodisconnect
KErrDisconnected
-36
Disconnected
KErrBadLibraryEntryPoint
-37
Badlibraryentrypoint
KErrBadDescriptor
-38
Baddescriptor
KErrAbort
-39
Interrupted
KErrTooBig
-40
Toobig
KErrDivideByZero
-41
Dividebyzero
KErrBadPower
-42
Batteriestoolow
KErrDirFull
-43
Folderfull
KErrHardwareNotAvailable
-44
KErrSessionClosed
-45
KErrPermissionDenied
-46
EmailPopErrors
KPop3CannotConnect
-170
ThePOP3serverrefusedtoallowaconnection
KPop3InvalidUser
-171
ThePOP3serverrefusedtoallowaconnection.Checkyourmailboxusername
KPop3InvalidLogin
-172
ThePOP3serverrefusedtoallowaconnection.Checkyourmailboxusernameandpassword
KPop3CannotCreateApopLogonString
-173
Couldnotcreatesecurelogonstring.Mailboxservermaynotsupportsecurelogon
KPop3ProblemWithRemotePopServer
-174
ProblemcommunicatingwithPOP3server
KPop3CannotOpenServiceEntry
-175
Panic
KPop3CannotSetRequiredFolderContext
-176
Panic
KPop3InvalidApopLogin
-177
Panic
EmailSocketErrors
KImsKErrorDNSNotFound
-180
CouldnotfindaDNSserver.PleasechecktheDNSaddressintheinternetcontrolpanel
KImsKErrorControlPanelLocked
-181
Couldnotconnecttointernet.Pleaseensuretheinternetcontrolpanelisclosed
KImskErrorISPOrIAPRecordNotFound
-182
KImskErrorActiveSettingIsDifferent
-183
UnabletoconnectusingthespecifiedIAP,alreadyconnectedtotheInternetusingadifferentIAP
KImskSecuritySettingsFailed
-184
SocketErrors
KErrNetUnreach
-190
Couldnotconnecttothenetwork.Currentlyunreachable
KErrHostUnreach
-191
Couldnotconnecttothespecifiedserver
KErrNoProtocolOpt
-192
Thespecifiedserverrefusestheselectedprotocol
KErrUrgentData
-193
KErrWouldBlock
-1000
ConflictswithKErrExtended,butcannotoccurinpractice
EMailIMAPErrors
KErrImapConnectFail
-200
CouldnotconnecttoIMAP4server
KErrImapServerFail
-201
TheconnectiontotheIMAP4serverhasbeenbroken
KErrImapServerParse
-202
KErrImapServerBusy
-203
TheIMAP4serverrefusedtoallowconnection.Theserveriscurrentlybusy
KErrImapServerVersion
-204
CouldnotconnecttotheIMAPserver.TheIMAPserverisofthewrongversion
KErrImapSendFail
-205
CouldnottransmittotheIMAP4server
KErrImapBadLogon
-206
TheIMAP4serverrefusedtoallowaconnection.Checkyourmailboxusernameandpassword
KErrImapSelectFail
-207
KErrImapWrongFolder
-208
CouldnotselectanIMAP4folder
KErrImapServerNoSecurity
-209
KErrImapServerLoginDisabled
-210
LoginforthisIMAP4serverhasbeendisabled
KErrImapTLSNegotiateFailed
-211
Asecureconnectioncannotbemadetothisserver
KErrImapCantDeleteFolder
-212
Thisfoldercannotbedeleted
KDmssUnknownErr
-221
KDmssMailboxUnavailableErr
-222
KDmssActionAbortedErr
-223
KDmssActionNotTakenErr
-224
KDmssCmdUnrecognisedErr
-225
KDmssSyntaxErrorErr
-226
KDmssCmdNotImplementedErr
-227
KDmssBadSequenceErr
-228
KDmssParamNotImplementedErr
-229
KDmssMailboxNoAccessErr
-230
KDmssExceededStorageErr
-231
KDmssMailboxNameErr
-232
KDmssTransactionFailedErr
-233
KDmssTimeOutErr
-234
EmailSMTPError
KSmtpNoMailFromErr
-240
Couldnotsendemailduetoaninvalidreturnemailaddress.Checkyouremailaddressinyouraccountsettings
KSmtpUnknownErr
-241
Problemwhilesendingemail
KSmtpBadMailFromAddress
-242
Emailmessagehasaninvalid"From"address
KSmtpBadRcptToAddress
-243
Emailmessagehasaninvalid"To","Cc"or"Bcc"address
KSmtpLoginRefused
-244
SMTPserverrefusedtoallowconnection
KSmtpNoMsgsToSendWithActiveSettings
-245
Couldnotsendemail.Themessagesaredestinedforanaccountdifferentfromthecurrentlyconnectedone.
KErrSmtpTLSNegotiateFailed
-246
Secureconnectionfailed.Servermaynotacceptsecureconnectionsorcertificatesmaybeexpired.
KImcmHTMLPartNotPopulated
-250
KImcmInvalidMessageStructure
-251
KErrPop3TLSNegotiateFailed
-260
BIOmessaging
KBspInvalidMessage
-500
"Corruptmessagecannotberead."
KBspSmartMessageInvalidToken
-501
"Corruptmessagecannotberead."
KBspSmartMessageNoParserDefined
-502
"Unknownmessagetypecannotberead."
KIacpUnknownSmsType
-510
"Lefttokennotstartingwithneither’M’nor’I’."
KIacpBIOMsgTypeNotSupported
-511
"ThisBiomsgisnotsuppported.."
KiacpMandatoryDataNotSet
-512
"AmandatoryField/&#118aluehasnotbeenfoundinSMSmessage."
KIacpUnknownMailProtocol
-513
"Mailboxconfigurationmessagereferstoanunknownprotocol."
KIacpErrRightToken
-514
"Improperrighttokeni.enotequalt/f(True/False)."
KIacpErrLeftToken
-515
"UnknownLeftTokeni.enotstartingwith’M’forMailor’I’forInternetconfiguration"
KIacpErrSmsDataNotParsed
-516
"Smsdatashouldbeparsedbeforecommiting."
KIacpErrSmsDataNotRestored
-517
"Smsdatashouldbeparsedbeforecommiting."
KIacpScriptErrISPNotFound
-518
"MailboxconfigurationmessagespecifiesanunknownInternetAccessPoint."
KIacpErrScriptNotDefined
-519
"Scriptnotinclude
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Symbian 字符串 操作