unicode 字符串转成 TDesC-转贴

unicode 字符串转成 TDesC

所有描述符,其实都不是真实的类,而是一个typedef。在非内核模式的时候,所有的描述符,如TDesC,其真实的实现是TDesC16,在内核模式的时候,则是TDesC8。还是看名取义,带8的是单字符1个字节的描述符,带16的是宽字符2字节的描述符。在非内核态的时候,统一使用16位的描述符作为默认值,是为了兼容unicode编码,帮助在不同语言下进行开发。大部分的系统API,提供的都是接受TDesC这样typedef的接口,其实也就是unicode-16的16位描述符。但在一些io相关的接口,都是接受8结尾的单字符描述符,以兼容不同的数据格式。单字符描述符通常不会对编码有任何约束,可以是二进制流,可以是utf-8,可以是一般的ascii码。具体是什么,逻辑需要调用者自己来维护。为了将io读入的数据传递给一些系统API,往往就需要将8位描述符转成16位描述符。这种转换和编码有密切联系,如果只是一般的ascii串(或者其他编码的ascii部分...),可以使用TDes的Copy接口,从8位拷贝到16位,或者从16位拷贝到8位。从8位拷贝的16位,第一个字节填充对应的8位字符的内容,第二个字节填充的是'\0',就是全部为0。而从16位到8位,可想而知,后一个字节的内容被截取抛弃。但如果是一些复杂的编码转换,比如utf-8的字符流转成系统所需的unicode-16,那么就需要用到CnvUtfConverter,它负责在不同的字符集中做转换。

  其他字符类型类

  看到Symbian的描述符,最疑惑的不仅仅是那套复杂的继承体系,还有_L和_LIT这样的宏。打开_LIT这个宏,你可以看到,它其实就是定义一个TLitC类型的const static常量字符串。从意义上来说,通过_LIT,可以将一些常用的字符串作为常量存在,使其不会反复构造和析构,是空间换时间的策略;从接口上看,它重载了很多转型运算符operator (),可以转身成为TDesC的各个版本,与该继承体系兼容;而从内存实现上来看,它存放的是:C++字符串的长度(除\0) + 原汁原味的C++字符串(就是\0结尾的一坨short int或者char数组...),通过这样的结构,一方面可以和Symbian的描述符表示相一致,又可以享用C++的原始支持,一举两得。

  相比_LIT的华丽,_L这个宏就土鳖不少,代表了旧生产力的落后。它其实,就是定义一个TPtrC,TPtrC中的内容指向了一个常量的数组(typedef后叫做TText...),这个常量数组,其实就是有一个char或short int的数组转型而成,也是原汁原味的C++字符串。从本质上来看,TPtrC扮演这个角色,完全是在人手短缺时的友情客串,它本不应该来做这件事情,因为其内部是通过一个指针来指向真实的字符空间,很多操作都经过多一次的取址操作,降低了效率;而TLexC,则是量身打造精心包装天生大明星,它优化掉了那个作梗的指针,提高了效率。所以摒弃_L,拥抱_LIT,是所有Symbian教学都会呼吁的内容,还是合情合理的。。。

  还有一个常用的和字符串相关联的东西,就是TLex类。它做的工作,就是大名鼎鼎的string-parsing。给它一个描述符,它可以还你一个整形数抑或是浮点数。TLex对数的解析,本质上还是基于ascii编码的,你给它的描述符编码,需要兼容ascii标准,不要拿个全角的数字为难它,它会罢工。

refer to: http://tech.ddvip.com/2009-05/1243588855121469_3.html

转载于:https://www.cnblogs.com/zziss/archive/2010/07/18/1780273.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二阶段团队冲刺(七)

1、我昨天的成就:从老师那里要来了完整的无课表信息,不需要再从网站爬取,无课表导入数据库 2、遇到什么困难:无课表导入数据库格式兼容问题 3、今天的任务 :购买阿里云服务器并配置 转载于:https://www.cnblogs.com/Ad…

java任务poer_java-Powermock-模拟超级方法调用

这是我的代码-import org.junit.Test;import org.junit.runner.RunWith;import org.powermock.modules.junit4.PowerMockRunner;import org.powermock.core.classloader.annotations.*;import static org.powermock.api.support.SuppressCode.*;class BaseService {public int …

2015 年度计划

2019独角兽企业重金招聘Python工程师标准>>> scala -> akka -> sparketcd 使用开源产品 negroni https://github.com/codegangsta/negroni转载于:https://my.oschina.net/kuerant/blog/372981

Mybatis 动态传sql可以查询表名,任意表名,不固定字段的个数返回未定义的类型以及增删改...

mysql查询表名: SELECT table_name FROM information_schema.tables WHERE table_schemasell AND table_typebase table;查询表中的字段: SELECT column_name FROM information_schema.columns WHERE table_schemasell AND table_nameseller_infoSpringB…

As3.0与java数据类型的比较总结

As3.0与java数据类型的比较总结 1. 在As3.0中所有的数据类型都是对象,都有自己的方法和属性; Java中的基本数据类型,其采取和C和C相同的方法。也就是不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储…

php透明颜色的代码,PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度

PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度imagecolorallocatealpha — 为一幅图像分配颜色和透明度。语法int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )imagecolorallocatealpha() 的行为和 imagecolor…

C语言goto关键字—尽量少用

一般来说,编码的水平与goto 语句使用的次数成反比。有的人主张慎用但不禁用goto语句,但我主张禁用。关于goto 语句的更多讨论可以参看Steve McConnell 的名著《CodeComplete. Second Edition》。 禁用goto 语句。自从提倡结构化设计以来,goto…

C#中使用Oracle 存储过程笔记

C#中使用Oracle 存储过程笔记1. 调用包含out/ in out类型参数的存储过程 存储过程: CREATE OR REPLACE PROCEDURE "SITE_EDITSITEDATAEXIST" (id_ number,name_ varchar2,httpRoot_ varchar2,flag out integer )//out 只具备输出功能 in out 为输入/输出型astempNum …

php网页生命周期函数,PHP的生命周期

PHP的生命周期php本身的生命周期是在命令行执行php test.php程序的生命周期(也就是cli)整个过程如下:执行php test.php调用每个扩展的模块初始化程序请求test.php程序调用每个扩展的请求初始化程序执行test.php程序调用每个扩展的请求关闭程序释放内存等清除工作调用…

为什么需要做归一化或者标准化

为什么需要做归一化或者标准化 一句话解释就是为了让我们求解loss最低值的过程中更加的平稳和缓,容易收敛。 具体解释可以看这里: 特征工程中的「归一化」有什么作用? - 忆臻的回答 - 知乎https://www.zhihu.com/question/20455227/answer/197897298 用我…

Windows on Device 项目实践 4 - 智能风扇制作

在前面的文章中,我们已经学习并且利用Intel Galileo开发板和Windows on Device制作了火焰报警器、感光灯和PWM调光灯。在这个项目中,我们来利用温度传感器和直流电机,完成一个简单的智能风扇的制作。 1. 温度传感器 LM35 是很常用且易用的温度…

Linux系统信息查看命令大全

系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所…

php接口异常,api接口异常怎么办

异常:在程序开发过程中出现的不正常情况,就是异常。比如除数是0,参数为null,调用参数的成员变量或者方法,数组下标越界。异常分为两大类型:(1)Exception:程序员可以解决的:空指针&am…

并发编程5-同步器

Synchronizer 控制多个线程的流程,比如线程执行到某一个点的时候是等待还是通过。 JDK中自带了信号量,关卡,闭锁闭锁CoutDownLatch 达到最终状态前是关闭的,所有线程在此阻塞, 达到最终状态后开放,并且不可…

RE validation in Java EE

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。 Pattern类中有两个最常用的方法&#xff1…

Apache Rewrite 规则详解

1、Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess) 两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apach…

php源码编程,10个小技巧让你做好php源码编程

PHP是目前使用最广泛的网站编程语言,也是今后发展的一大趋势。有很多站长或多或少掌握一些php编程方法,下面小编就介绍十点实用的php编码技巧。1、cho比print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接&…

iPhone与Android手机 各个型号的UserAgent

微信端模拟:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380■iPhone●iOSMozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/…

动态调用WCF服务[转]

原文地址:http://blog.csdn.net/castlooo/archive/2010/05/06/5562619.aspx客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方法,反射wcf 的接口,动态调用接口中的方法。 主要为,动态绑定&#x…

java 正规 忽略,java-正则表达式查找变量并忽略方法

我正在尝试编写一个正则表达式,以查找给定一段JavaScript代码中的所有变量(并且只有变量,完全忽略方法).实际的代码(执行regex的代码)是用Java编写的.现在,我有这样的事情:Matcher matcherPattern.compile(".*?([a-z]\w*?).*?").matcher(string);while…