Symbian C++手机编程中字符串处理
2009-12-06 22:00
302 查看
Symbian C++ 手机编程中的字符串处理和标准C/C++有很大的不同,它提供了一种安全、有效的机制来处理串和二进制数。
通过比较C相对于Symbian OS中对串的不同处理来认识描述符,字符串有如下几种不同的存储方式:
1. 将字符串放在程序代码段中,这样的字符串是不能发生更改的
在C中可以表示为:
char* stringInRom= “Hello”;
相应的代码在symbian OS为:
_LIT(KStringRom, “Hello”);
TPtrC stringInRom = KStringRom;
其中_LIT是一个宏,它定义了一个存储在程序代码中的名字为KString的描述符,其值为”Hello”。TPtrC是一个两个字长的对象,它既包含指针,也包含长度,该语句将该串的指针和长度都拷贝给了stringInRom。这里的C在TPtrC中的含义就是constant.
2. 将串中的内容拷贝到栈中
在C中:
char stringInStack[7]
strcpy(stringInStack, stringInRom);
在symbian os 中:
TBufC<7> stringInStack(KStringRom);
TBufC<7>是一个可以存储7个字节的描述符,这个对象包含一个字(2Bytes)大小的头,表示其长度为7,后面跟着7个字节的数据,这里的C仍是constant的意思。
3. 将串中内容放到堆中
在C中
char* stringInHeap = (char*)malloc(7 * 2);
strcpy(stringInHeap, stringInRom);
在symbian Os中:
HBufC* stringInHeap : KStringRom().AllocLC();
HBufC* 是一个指向基于堆存储的描述符的指针,通过在KStringRom()将其转化为所有描述符的基类TDesC。该基类提供了AllocLC()方法,该方法在缺省堆中申请了所需大小的HBufC,并将原描述符的内容拷贝到HBufC中,AllocLC还将HBufC*压入到CleanupStack中,我们可以使用CleanUpStack::PopAndDestroy()来删除HBufC。
symbian目前有五种具体的描述符:TPtr, TBuf, TPtrC, TBufC, HBufC,他们都是从TDesc继承而来。按照可以更改和不可以更改数据来分,描述符可以分为一下两大类:
a. 可以更改数据的描述符:TPtr和TBuf,从TDes继承而来,而TDes也是从TDestC继承而来。
b. 不可以更改数据的描述符:TPtrC和TBufC和HBufC,他们都是从TDesC继承而来。
4. 描述符的操作和使用
TDes和TDesC是其它描述符的基类,symbian提供了许多对字符串进行操作的的方法:
a. 指针转换方法
PtrZ()可以帮你找到指向描述符数据的字符串指针,返回值为TUInt16*或TUInt8*,并且在数据的末尾加一零作为结束符,可以实现和C++标准库中的字符串之间的转换。
b. 提取方法
TDesC的Left(), Right()和Mid()方法可以提取一个串的任何部分
c. 搜索方法
TDesC的Locate()和Find()方法可以进行区别或不区别大小写的前向或反向的搜索。
d. 比较方法
Comapre()用于字节的比较
e. 设置方法
SetLength()允许将长度设置为0-MaxLength()之间的任一值,SetMax()将长度设置为最大值。
f 操作数据
TDes的Trim()方法将数据头部和尾部的空格全部删除
Copy()方法将数据拷贝至描述符,并覆盖原有数据
Append()方法,在描述符末尾追加数据
Insert()方法,将数据插入串的任何位置
Delete()方法,可以删除从任意位置开始连续的数据。
通过比较C相对于Symbian OS中对串的不同处理来认识描述符,字符串有如下几种不同的存储方式:
1. 将字符串放在程序代码段中,这样的字符串是不能发生更改的
在C中可以表示为:
char* stringInRom= “Hello”;
相应的代码在symbian OS为:
_LIT(KStringRom, “Hello”);
TPtrC stringInRom = KStringRom;
其中_LIT是一个宏,它定义了一个存储在程序代码中的名字为KString的描述符,其值为”Hello”。TPtrC是一个两个字长的对象,它既包含指针,也包含长度,该语句将该串的指针和长度都拷贝给了stringInRom。这里的C在TPtrC中的含义就是constant.
2. 将串中的内容拷贝到栈中
在C中:
char stringInStack[7]
strcpy(stringInStack, stringInRom);
在symbian os 中:
TBufC<7> stringInStack(KStringRom);
TBufC<7>是一个可以存储7个字节的描述符,这个对象包含一个字(2Bytes)大小的头,表示其长度为7,后面跟着7个字节的数据,这里的C仍是constant的意思。
3. 将串中内容放到堆中
在C中
char* stringInHeap = (char*)malloc(7 * 2);
strcpy(stringInHeap, stringInRom);
在symbian Os中:
HBufC* stringInHeap : KStringRom().AllocLC();
HBufC* 是一个指向基于堆存储的描述符的指针,通过在KStringRom()将其转化为所有描述符的基类TDesC。该基类提供了AllocLC()方法,该方法在缺省堆中申请了所需大小的HBufC,并将原描述符的内容拷贝到HBufC中,AllocLC还将HBufC*压入到CleanupStack中,我们可以使用CleanUpStack::PopAndDestroy()来删除HBufC。
symbian目前有五种具体的描述符:TPtr, TBuf, TPtrC, TBufC, HBufC,他们都是从TDesc继承而来。按照可以更改和不可以更改数据来分,描述符可以分为一下两大类:
a. 可以更改数据的描述符:TPtr和TBuf,从TDes继承而来,而TDes也是从TDestC继承而来。
b. 不可以更改数据的描述符:TPtrC和TBufC和HBufC,他们都是从TDesC继承而来。
4. 描述符的操作和使用
TDes和TDesC是其它描述符的基类,symbian提供了许多对字符串进行操作的的方法:
a. 指针转换方法
PtrZ()可以帮你找到指向描述符数据的字符串指针,返回值为TUInt16*或TUInt8*,并且在数据的末尾加一零作为结束符,可以实现和C++标准库中的字符串之间的转换。
b. 提取方法
TDesC的Left(), Right()和Mid()方法可以提取一个串的任何部分
c. 搜索方法
TDesC的Locate()和Find()方法可以进行区别或不区别大小写的前向或反向的搜索。
d. 比较方法
Comapre()用于字节的比较
e. 设置方法
SetLength()允许将长度设置为0-MaxLength()之间的任一值,SetMax()将长度设置为最大值。
f 操作数据
TDes的Trim()方法将数据头部和尾部的空格全部删除
Copy()方法将数据拷贝至描述符,并覆盖原有数据
Append()方法,在描述符末尾追加数据
Insert()方法,将数据插入串的任何位置
Delete()方法,可以删除从任意位置开始连续的数据。
相关文章推荐
- C++ 编程处理字符串经常出错,我自己接管了Windows的那个错误报告
- 编程作业 简单的学生信息处理程序实现[北京大学C++课程]
- C/C++字符串处理(3):String ADT - 字符串只是抽象数据类型
- C/C++字符串处理(4):std::vector与std::StringBuilder
- C/C++常用的字符串处理函数
- C/C++字符串处理(5):std::deque与std::TextPool
- 一步一步学编程之字符串处理函数(二)
- C/C++ 字符串处理函数
- C++ 字符串各种处理
- C++坑爹的字符串之从后往前处理字符串
- Windows核心编程--错误处理/字符/字符串
- 在魅族M8手机(WinCE6.0系统)上编程设置文件关联(C/C++源码)
- c/c++字符串处理大集合
- 对C++中处理字符串的理解
- C++ 字符串处理
- c++的字符串string处理
- java中字符串处理、串联和转换的几个常用方法,以及如果需要自己编程实现的具体实施步骤。
- 内核编程笔记(一、内核字符串处理)
- Shell 编程10(字符串处理)
- C++ 字符串编程训练3