- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Symbin 描述符(下)转换
描述符下转换
业余有时候把一个事情当作任务来做的时候,往往会很受限制,就象这篇文档,上次写了个上篇,关于描述符的下篇,自己就迟迟没有勇气和时间写完,好几次都想静下心来好好完成它,但是都未能如愿,可如果不写显然我也不好意思写其它的一些东西,闲话提到这里,花了几天业余时间总算是完成了,该文质量不足之处还望读者您见谅。
通过前面关于描述符概念和使用的简单描述,下面我们直接进入描述符转换的主题。
虽然描述符有五类,但是作为描述符变量用的,只有三类即栈描述符、堆描述符、指针描述符。所以本文所述描述符的转换也只是在这三种类型间展开,这三类描述符之间的互相转换其实可以用下面这种伪代码方式给出:
TBuf20 iBuf;
TPtr iPtr((const_castTUint16*(iBuf.Ptr())),iBuf.Length(), iBuf.Length());
HBufC *iHbuf;
iBuf = iPtr;
iBuf = iHbuf-Des();
iPtr.Set((const_castTUint16*(iBuf.Ptr())),iBuf.Length(), iBuf.Length());
由上面可知指针型可以起堆型和栈型描述符的中间过渡的桥梁作用。
不可修改向可修改描述符的转换
原则1:通过不可修改描述符类内的Des()函数,将不可修改的描述符转换成可修改的指针描述符
示例1:TBufC转换成TPtr
_LIT(KText, Test Data);
TBufC10 NBuf ( KText );
TPtr Pointer = NBuf.Des();
示例2:HBufC转换成TPtr
HBufC * Buf = HBufC::NewL(15);
_LIT (KText , Test Text);
*Buf = KText;
TPtr Pointer = Buf-Des();
原则2:通过TPtr的构造函数或Set()函数可以将TPtrC描述转换为可修改的指针描述符
示例3:TPtrC到TPtr
const TText * text1 = _S(Hello World\n);
TPtrC Ptr1(text1);
TPtrC Ptr2(Ptr1);
//可以通过构造函数
TPtr Ptr3((TUint16 *)(Ptr1.Ptr()), Ptr1.Length());
//也可以通过Set()函数
Ptr3.Set((TUint16 *)(Ptr1.Ptr()),Ptr1.Length(), Ptr1.Length());
8位和16位之间的描述符转换
8位到16位的描述符转换
原则1:通过将两个8位描述符的内容合并为一个16位描述符的方法实现内存不动,内存块类型强转(我称其为保留描述符字节大小方法)。
示例4:8bit To 16bit保留描述符字节大小方法1
_LIT8(KText , Test Text);
TBuf820 iBuf8(KText);//描述符实际占用了9个字节9个8位描述符
TBuf20 iBuf16;
//实现内存块的强转
TPtrC16 ptr16(reinterpret_castconst TUint16*(iBuf8.Ptr()), (iBuf8.Length()/2));
//真实的内存不动已经结束,这里是重新申请了一块内存并实现内存赋值拷贝
iBuf16 = ptr16;//描述符实际占用了8个字节4个16位描述符,导致数据丢失
由上面的这个例子明显是丢失了数据了,原因就出在设置长度时用了(iBuf8.Length()/2),为了剔除错误,我后来改了一个新的示例6
示例6:8bit To 16bit保留描述符字节大小方法2(由于上例用了TPtrC,所以该例使用TPtr指针,以扩展应用)
_LIT8(KText , Test Text);
TBuf820 iBuf8;
iBuf8.FillZ(20);
iBuf8 = KText;//实际占用9字节9描述符
TBuf20 iBuf16;
TPtr ptr16(reinterpret_castTUint16*(const_castTUint8*(iBuf8.Ptr())), ((iBuf8.Length()+1)/2),((iBuf8.Length()+1)/2));
iBuf16 = ptr16;//实际占用10字节5描述符,但是第10个字节为0零值,也即9字节大小有用
注:其实这里用堆描述符来说明可能更好些,但是本人在调试过程中为了能够看到调试的效果,所以用了TBuf;而且个人觉得通常这种方法主要在文件读取等实际过程中用到,如果要转换为16位的话,肯定是偶数大小的8位描述符。
原则2:重新构建内
您可能关注的文档
最近下载
- 【MOOC】《自动控制原理》(南京邮电大学)章节期末中国大学慕课答案.docx VIP
- 金蝶云星空操作手册(2财务篇).pdf VIP
- 从共十一人到文班全能型京剧表演体系.docx VIP
- 挡墙施工危险源辨识及风险评价.pdf VIP
- 苏教版(2024)新教材小学三年级科学上册第四单元《15 热气球》精品教案.doc VIP
- 青海省公立医院医疗服务项目指导价格目录、使用说明.pdf VIP
- 梅兰芳(1894~1961),京剧大师。形成自己的艺术风格,世.doc VIP
- 东师古汉语基础(一)18秋在线作业1-4辅导资料.docx VIP
- WORD上机练习题目.pdf VIP
- 哈啰2025年案例合集.pptx
原创力文档


文档评论(0)