说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi的类型转换

HTML文档下载 WORD文档下载 PDF文档下载
Delphi的类型转换

Delphi是一种强类型转换的语言。在VC中,赋值符用″=″

例如x=1;到了Delphi赋值符就变成了″:=″

例如x:=1。 从赋值时用符号″:=″而不用″=″

就隐约可见Delphi对类型匹配要求之严

即赋值符右边的类型一定要和左边一致。用惯了VB或VC的程序员

初用Delphi

稍不留神

就会出现类型不匹配的错误。对初学者而言

类型转换也是学习Delphi的重点和难点

为此本文特对Delphi的类型转换做一总结

以供读者参考。

一、数的类型转换

把表达式的类型从一种类型转化为另一种类型

结果值是把原始值截断或扩展

符号位保持不变。例如:

数的类型转换 举例

字符转换为整数 Integer('A')

整数转换为字符 Char(48)

整数转换为1个字节的逻辑型 Boolean(0)

整数转换为2个字节的逻辑型 WordBool(0)

整数转换为4个字节的逻辑型 LongBool(0)

整数转换为10进制pascal型字符串 caption:=intToStr(15)

整数转换为16进制pascal型4位字符串 caption:=intToHex(15

4)

地址转换为长整型数 Longint(@Buffer)

二、数的“分开”与“合成”

取32位longint型数的 高16位数为 hiword(longint-var)

低16位数为 loword(longint-var)

取16位数的 高8位数为 hibyte(integer_var)

低8位数为 lobyte(integer_var)

取32位地址的段选择符和偏移量 段选择符(高16位地址)为 selectorof(p)

偏移量(低16位地址)为 offsetof(p)

段选择符和偏移量合成为指针   Ptr(SEG

OFS: Word)相当于C语言的宏MK-FP(SEG

OFS)

例如在Windows中

Task DataBase结构0FAh偏移处包含'TD'标识

我们可以容易地编写如下代码观察到这个位于Windows内部的未公开的秘密:

{函数ptr(seg

ofs)的用法

相当于C语言的MK-FP(seg

ofs)}

var p:pbyte;ch:char;

p:=ptr(getcurrentTask

$FA);

ch:=char(p^); {结果为ch='T'}

p:=ptr(getcurrentTask

$FA+1);

ch:=char(p^);   {结果为ch='D'}

三、字符串string 字符数组与指向字

符串的指针pchar的区别与联系

这3者的基本概念相同

但有一些非常细微的差别

在编程时稍不注意就会出错

需高度重视。

1、使用指向字符串的指针

如果不是以0结尾

运行时就会出现错误。为了避免这种错误

需要在字符串结尾人工加入0 即char(0)

或用strpcopy函数在字符串结尾自动加0。

例1: 指向字符串的指针

如果不是以0结尾

运行时会出现错误:

{s[0]=3 s[1]='n' s[2]='e' s[3]='w'}

var

s:string;

p:pchar;

begin

s:='new';

label1.caption:=s; {new}

label2.caption:=intTostr(integer(s[0]));{3是字符串的长度}

p:=@s[1];{不是以0结尾

莫用pchar型指针}

label3.caption:=strpas(p); {运行时出现错误}

end;

例2:在字符串结尾人工加入0即char(0)

可使用指向字符串的指针。

{s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;}

{p-->'new'}

var

s:string;

p:pchar;

begin

p:=@s[1];

s:='new'+char(0); {以0结尾

可用pchar型指针}

label1.caption:=strpas(p); {new}

label2.caption:=s; {new}

label3.caption:=intTostr(integer(s[0])); {4是字符串长度}

end;

例3: 用strpcopy函数赋值会在字符串s结尾自动加0。

{s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;}

{p-->'new'}

var

s:string;

p:pchar;

begin

p:=@s[1];

strpcopy(p

'new');{strpcopy函数在字符串结尾自动加0}

label1.caption:=strpas(p);{new}

label2.caption:=s;{new}

label3.caption:=intTostr(integer(s[0]));{4}

end;

2、下标为0的字符串标识符存放的是字符串长度

字符型数组基本相当于字符串

但不能存放字符串长度。字符串可以用s:='a string'的形式赋值

但是字符型数组a[ ]不可直接用a:='array'的形式赋值

用此种形式会出现类型不匹配错误

可选用strpcopy函数赋值。

例4: 字符型数组s[ ]相当于字符串

但没有存放字符串长度的位置。

{s[1]='n' s[2]='e' s[3]='w' s[4]=0;}

{p-->'new'}

var

s:array[1..10] of char;

p:pchar;

begin

{s:='new'+char(0); error}{错误}

p:=@s[1];

{p:=@s; is not correct}

strpcopy(p

'new');

label1.caption:=strpas(p);{new}

label2.caption:=s;{new}

{label3.caption:=intTostr(integer(s[0]));}{不会出现4

下标超出错误}

end;

例5:下标从0开始的字符数组s

s相当于@s[0]。

{ s[0]='n' s[1]='e' s[2]='w' s[3]=0;}{p-->'new'}

var

s:array[1..10] of char;

p:pchar;

begin

{s:='new'+char(0); error}{错误}

p:=s;

{p:=@s[0] is also correct}

strpcopy(p

'new');

label1.caption:=strpas(p);{new}

label2.caption:=s;{new}

label3.caption:=s[0];{n}

end;

3、下标从0开始和从1开始的字符数组地址的表示方法也有细微不同:

例6:下标从1开始的数组a 与下标从0开始的数组b 的比较。

var

a:array[1..10]of char;

b:array[0..10]of char;

{a:='1..10';}{type mismatch}

{b:='0..10';}{type mismatch}

begin

strpcopy( b

'from 0 to 10'); {正确 因为b即是@b[0] }

strpcopy(@b[0]

'from 0 to 10'); {正确 与上个表达式结果相同}

strpcopy(@a[1]

'from 1 to 10'); {正确 }

strpcopy( a

'from 1 to 10'); {类型匹配错误 因为a即是@a[0]}

end;

Java 7爆最新漏洞,10年前的攻击手法仍有效 Twitter联合创始人Biz Stone谈Facebook用户体验 提倡零广告 英雄会:企业的人才漏斗 开发者的武林大会 一次错误估算带来的启示 苹果开发者中心被黑:开发者信息或被窃取 SIM卡加密存漏洞 将影响数亿计的手机用户 搜狗茹立云:探索引擎产品落地 浏览器+搜索模式会成主流吗? 大势所趋,IBM Acme Air至少使用Netflix的5个开源工具 【观察】跨越“朦胧期”的云计算:产业、核心技术、生态圈以及突破点 Rovio Account:平台化之路修成正果 甲骨文总裁马克•赫德采访实录:用软硬件集成一体机打垮对手 如何一步一步打造高可扩展性的应用程序? 用Java编程,请保持简洁! 从安全隐患带来的商机来看,Hadoop同样很美 三年增四倍:如今谷歌服务占北美互联网流量四分之一 决战低功耗?Intel明年推低功耗Xeon处理器 在软件架构上增加新功能的注意事项 90后的代码界“女神”李雪:在编程中找到自己的“灵魂” 大数据之路不乏荆棘,然则其中的机遇却高于一切 iPhone销量令人意外:苹果Q3财季净利69亿美元 同比下滑 励志:12位早起的IT大佬们让小伙伴们都惊呆了 独家:苹果5周年限免神作,BADLAND开发者访谈 10亿次订阅!苹果Podcast的里程碑 免费利器Unity 4.2正式发布 支持WP8、Win8和BB10 SDCC 2013:Pinterest首位中国籍工程师两场演讲议题确定 甲骨文公布中国首届“Duke选择奖”名单 Moco、X幻想、开源中国获奖 直接拿来用,10个PHP代码片段 编程的未来 数据将成为主角 OpenCL 2.0发布,带来更强悍的异构计算能力 代码审查方式大调查 辅助工具居首(信息图) 一网打尽当下NoSQL类型、适用场景及使用公司 (关于VC++与Sql Server 的)怪事!(分不够可以加) 请教关于读取和存储大文本文件的问题 请大家帮忙看一段程序 关于数据的备份与恢复... 关于查询的问题(简单) mysql中有字段 :2002-9-2 的varchar类型,如何在jsp中把他转换成date型 huffman编码中交流系数表如何在c中表示??????? 我用套接字编程的时候,在连接初使的时候向服务器发出连接请求,服务器返回的字符串是 使用VBScript编程下的类型转换问题 如何遍历主窗体中的每个菜单项!!!不是简单的问题 请问,用程序怎样调用Recongnition Profile的功能? 各位,怎样读取XML格式的配置文件,请给出源代码。急需!!! 关于sco unix5。05的软件的问题 这个文件如何解压:steven.advprog.tar.Z 这个问题很怪的!! 兄弟们,救急啊,关于调用oracle的... jive高手 jive 论坛安装后,为什莫我把Locale Settings 改为中国在论坛的首页报错 调用存储过程的方法,在线等待... 请问各路英雄...??? 在DLL中创建多线程的问题? 着急啊!!!一个关于多文档的问题 install expression 打包问题 急急急 求教 一个框架结构的左右两边同时改变的问题 ★★ 高兴送分 ★★(zzwu) 请教高手 系统重装,SQL 6.5只剩下几个data目录下的dat文件,请问怎么才能把数据完全恢复? 客户端调试sql server存储过程 兄弟我想换工作,还企盼网友推荐(看在我对java版热心参与,请版主保留几天) 如何配置jConnect连接Sybase数据库?需要安装jdk吗? 如何在模块中编写一个函数,对数据库进行增,删,修改操作? a 请问各位DirectDraw是做什么的?最好能详细谈谈他的前景?谢谢! 我的win2000server在域中,被以域中Administrator进入,结果我的机子以域用户进入后,机子的系统关机选项变为不可用,以域中Administrato b/s应用程序怎样限制它只能安装在某一台电脑上? FORM中,如何通过 ODBC 访问 Foxpro的 dbf 数据文件(在线等待)? 如何判断连接服务器的sql数据库成功与否?在线等待高手解答! applet waiting online 程序员招聘(西安) 怎样让我的对话框程序实现全屏显示急急急1。。。 我的用法是否正确 有本事的就进来 JSP+JDBC环境中如何配置jConnect连接Sybase数据库?需要安装jdk吗? 急,高分求解Font问题 我编写了一个读写COOKIE的公用函数在我的工程中使用,老不通过,麻烦大哥们帮我诊断诊断 请问怎样获取托盘窗体的句柄??(给一百分) 请帮帮忙,如何调用dtswiz.dll 如何用BDE Administrator设置数据库别名(不用ODBC)访问Oracle数据库。高分相送! 对不起,我知道这个问题很简单,但是我一直没有搞出来,您能告诉我吗?datagrid中进行insert,delete,update操作? 寻求eVC用ADO操作cbd数据库的代码。 两个关于枚举类的问题 问用过struts的朋友一个问题,给100分! 分子晶体 原子晶体 离子晶体 金属晶体的堆积方式各是什么 日常生活中,自己发现的汉字之最(要三种以上的)比如说:汉字里读音最多的是“那”字 汉字里读音最多的是“yi” 文章中出现最多的是“的”字 快来参与回答吧! 有a克Mg、AL、ZN的混合物,投入足量稀硫酸中,待反应完全后蒸发,得到固体B克,则生成H2为多少克A、b-a /49 B、(b-a) C、b-a/48 D、a—b/48 喝汽水,你喜欢有汽喝,还是放汽喝? 中国字词典之最?我国第一部按部首编排的字典是东汉许慎著的( ).我国现存最早的按韵编排的字典是隋朝陆法言著的( ).我国最早用字典正式命名的字典是清代张玉书,陈敬廷等编的( ) 50g的Zn、Al、Mg的混合物与H2SO4(稀)反应后将生成物蒸干得到218g,求H2质量 为什么开启汽水时会有汽泡并且会溢出来?字数100字左右 先森是什么意思 由Mg、Fe、Al、Zn四种元素组成的合金20g,跟足量稀H2SO4生成的H2的质量为多少?只和足量H2SO4反应, 人类已知的已灭绝的动物.植物有哪些? 先森什么意思? 二异氰酸酯的结构式和异氰酸根的结构式?RT,急, 由肝脏细胞产生的尿素要经过哪些结构才能到达肾小球 这幅画是谁画的?谁画的? 氰酸铵结构式是NH4-N=C=O还是NH4-C=N-O 最新网络用语 森 是什么意思 如何用矛盾与阶级的分析方法评价某个历史人物? 有没有最近 的网络用语 把我写的词的字的意思告诉我 (>^ω^ 如何用阶级分析法评价历史人物 NA2SO3 和 Na2SO4两个方程:2NaOH+SO2=NA2SO3+H2O2NaOH+CuSO4=Cu(OH)2+Na2SO4这两个方程应该写正确了吧但是 为什么一个是NA2SO3 另一个是Na2SO4 呢? 而钠离子不都是+1价 硫酸根 不都 这上面是什么文字,写的是什么意思 怎样用唯物史观和阶级分析方法评价一个历史人物 关于土地的诗文 有谁知道这幅画上面的字 是什么意思 如何用矛盾与阶级的分析方法去分析评价一个历史人物,例如毛泽东,2000字左右 现代网络用语有哪些? 请问 松香类的树脂(氢化)有粉末型或者液体型的吗 电解氯化钠阳极都有什么离子存在?除了氯离子,有氢离子和钠离子吗?加入小苏打为什么会产生气泡?艳色反应呈黄色吗? 为什么汽水越喝越没汽?同上 用层次分析法分析“那这个观点解释历史的” 异氰酸酯怎么读 上面写的是什么? 分析历史问题有哪些基本分析方法?答题用~如阶级分析法~ 双选)mg铜与足量浓硫酸共热时完全反应,在标准状况下生成nL气体,则被还原的硫酸量是mg铜与足量浓硫酸共热时完全反应,在标准状况下生成nL气体,则被还原的硫酸量是 A.m/32mol B.m/64mol c.98n/22.4 上面的字写的是什么? Br2与AgNO3反应离子方程式 足量的浓硫酸和m克铜完全反应,得到标准状况下nLSO2,则被还原的硫酸是?用含m或n的代数式表示出来被还原的硫酸是多少摩尔?答案是m/64 请问这是什么东西→_→上面什么都没写…… 除了AgNO3能与KCl反应外还有什么能反应?要复分解反应~你们都理解错了,我问的是与KCl反应,而不是与AgNO3反应~ m g铜与足量浓H2SO4共热时完全反应,在标准状况下生成n L气体,则被还原的H2SO4的量是(  )最好有过程,感激不尽@! 景观人工造雾和自然雾效果一样吗? 稀硫酸与镁粉反应一个装有稀硫酸的锥形瓶口上套有一个可充气的气球,气球里装有足量的镁粉,把整个装置放在天平上,称得总质量为M1.把气球里的镁粉倒入稀硫酸里,充分反应后,立即产生大 酒精挥发生成什么物质从2Mg+CO2=点燃=2MgO+C中你能得出什么结论 人造雾 雾是怎么产生的? 电解氯化铁溶液 阴极应该是三价铁先得电子变为二价铁才到氢离子 得电子 m克铜与足量浓H2SO4溶液共热时完全反应,在标准状况下生成nL气体,则被还原的H2SO4的量是A m/32molB m/64molC98n/22.4gD 196n/22.4g 为什么水能化泥土 请问所谓的树脂是不是松香呢?为什么会有松香树脂这一说法呢?我有用过酚荃树脂,但达不到我想要的粘度.现在想找松香来替代看是否能解决我的问题.但我不知道松香和树脂有什么区别.我又 用惰性电极电解熔融的氯化钠为什么是钠离子得电子,不是氢离子得电子能力强的吗麻烦顺便复制这个反应的阴阳极反应式和总反应过来下阳极:2Cl- - 2e- = Cl2 ↑ 阴极:2Na+ + 2e- = 2Na总反应:2N 日本最高的山是富士山吗?高多少米阿? 人造雾是怎样形成的?方法1.往广口瓶中倒大约半瓶的热水.2.把滤茶器放在瓶口上.3.再往滤茶器中加入冰块,雾就会在广瓶口内形成.想一想,这些雾是怎样形成的? 用层次分析法分析下列句子:1.拿这个观点解释历史的2.指挥员领导巡逻组巡逻 盐碱化土地的改造措施 人造雾降温北京人造雾公司 【Zn,Fe,Mg,Al混合物19.9g与一定质量20%希硫酸恰好完全反应,蒸发水后得固体77.5g,生成H2___gZn,Fe,Mg,Al混合物19.9g与一定质量20%希硫酸恰好完全反应,蒸发水后得固体77.5g,生成H2___g 金属晶体采取紧密堆积的方式,为什么啊是不是和金属键无方向性和饱和性有关? 香松树树脂与松香的区别 将一定量的Mg ,Al ,Zn混合物与足量的稀H2SO4反应,生成H2 0.25g,原混合物的质量可能多少克?A.2g B.6gC.10gD .14g
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘