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

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;

阿里巴巴数据交换平台——集大成于一身 [体验]Windows 8 Metro/Modern Style IE 10 Growth Hacker正席卷全球,你了解它吗? Splashtop发布Ubuntu Linux版本Streamer 性能超过VNC 10倍 Windows 8引领智能操作 人机交互进入触控时代 豌豆荚发布新版应用搜索 推出“绿色标签”机制 权威解读:苹果的未来将走向何方? Google炮轰Facebook:你们的社交已经过时了! iOS设备硬件规格完整汇总 2012 MDCC“2012移动互联网应用创新大赛与开发者面对面”专场:创所未享,携手逐梦! RIM携QNX为“2012 BlackBerry平台移动应用高校竞赛” 颁奖 BlackBerry 10 策略:用金钱吸引游戏开发者 黑莓10要来了:RIM正式开放应用提交 从RIM与微软达成exFAT授权所想到的 OpenStack中国行来到南京 中兴通讯分享电信行业应用 CSS架构目标:预测、重用、扩展、维护 黑客利用移动浏览器漏洞窃取云计算资源 地位动摇:Windows设备10月销量同比下滑21% 手机QQ浏览器4.0 Android版 极速快感 生存还是毁灭:Facebook惨败真是HTML5的错? OpenStack基金会主席:一年后成熟度超越CloudStack 在线学习新编程 技巧全攻略 “英特尔杯”HTML5程序开发邀请赛侧记 C#编译器组首席工程师Eric Lippert离职 加盟Coverity Testacular:Google开源的JavaScript测试执行过程管理工具 黑莓亚洲开发者大会报道:BB10将敲开亚洲应用市场大门 挑战Google!传Facebook与Yahoo要联手开发搜索引擎 揭秘Android 4.2 开发者的天堂与地狱 11大黄金法则:顶级移动UX设计心髓 库克时代:苹果已经不是苹果 设计师必备:极简风格的Fluid UI快速原型图工具 MFC 初学者的一个问题? 谢谢! 高分求救:我的2000server经常出现"HTTP/1.1 新建会话失败",应如何解决? win2000server重装后,硬盘丢失,盼解决。 想认识西安的 Delphier,报上你的 QQ 和 Email? MFC 初学者的一个问题? 谢谢! 应该很简单吧:如何在程序中使用外部Dll及Lib? 简单的问题 急 送分 MYSQL权限问题~!~!小菜提问. 使用MSCOMM从串口中读出乱码的问题 如何 实现 数据 窗口 对象 的 不同 行显示不同颜色 SELECT * FROM mytable order by IndexNum where (IndexNum%100=0) , 那里有问题? 强烈建议CSDN论坛加入贴图功能!! PB做的客户端进销存软件的毕业论文,该怎么写,给点意见! 招聘网页美工人员和ASP程序员 [帮我顶]强烈建议CSDN论坛加入贴图功能!! 请问如何屏蔽其他窗口? filter 问题 ????????????? 国内哪个大学的计算机图形学最强? 如何用ACCESS建立一个合理的数据库? 需要空间的看看 如果主键和其他表的外键相连是不是没有办法删掉其中某些表的数据吗? 求助:xls用odbc不能编辑,出错:Syntax error or access violation PE格式的资料你有吗? VB 中的类模块与模块之间的联系是什么? 怎样从windows访问linux的ext3分区? 关于CFM-Resources免费空间(asp+cf+access+30M)的问题!100分 消息接收后拆分,毕设急!!60分已经是倾我所有了 热心的VC大虾,请多帮忙 请问如何用JAVASCRIPT获取服务器时间,并以字符串形式输入,如:200206021943,谢谢! ADO访问access数据库,怎样删除一条记录???? 关于字符串转日期型的值的问题 Tadoquery中参数返回的问题 请问各位高手门,现在公司的数据库编程普遍用哪种模式ADO或ODBC? 如何在CFormView中添加位图背景?? 谁来帮我看看这几行程序!我实在无法解决,谢谢! 请问如何自己编程使用Logitech QuickCam 人工智能的问题(乜人都要睇) 400分题目问题要解决了就立刻、马上、立即、给分! 菜鸟问题c++中清屏函数在哪? 请问哪里有c#语法的速查手册,最好有与vb的对照版? ISA声卡,CD与ME! 帮帮忙,一个很简单的sql语句 机器的电源关不了?(重谢!) 对话框算窗口吗? Delphiz中的Excel报表问题(十万火急!!!) help 请各位帮忙介绍一本linux的入门教材,多谢!! 菜鸟送分了!(报表打印问题) 学编程N个月了,我今天要学会HOOK到底是什么函数怎么用的,想吐血的先近来~~~~ 报告D6的一个BUG 要编写象boot.ini这样的 文件 我 应该学习什么 寿,令,莫加偏旁组词 第10题,为什么氢氧化钠的摩尔质量是40 纸杯烧水的原理 长时间在有甲醛熏蒸后并由氨水中和后的车间工作会有什么样的危害? 1库伦电荷量等于多少个电子所带的电荷量 请问高锰酸钾与甲醛反应用于醺蒸消毒的原理是什么? 电动车电冲不进去是什么问题那天电动车连续放那充电充了4天没拔掉,今天发现没电.然后又充了半天发现还是没电.是什么原因啊 ,懂的说下. 纸杯烧水实验步骤,要完整的,写明实验材料和实验步骤? 相同质量的下列物质在空气中完全燃烧消耗氧气最多的是Ah2 Bp cc dsA h2 Bp Cc Ds 过程 快点 我的电动车冲不进电去是怎么回事呀? 谁知道一些神奇的实验像纸杯烧水,硬币浮在水上一些看起来很神奇的现象,有谁知道啊硬币浮在水上就是由于水的张力 4.8g镁在氧气中完全燃烧,求参加反应地氧气的质量,及消耗标准状态下的空气的体积 质量为40kg的小明同学骑着一辆质量韦10kg的自行车在平直的公路上均速行驶,在5min内行驶了1500m的路程 电动车电池冲不进去电是怎么回事?大神们帮帮忙我的电动车今年才买的是上海立马,今天开着已经快没有电了,又开了一会就彻底动不了了,然后我推回家冲电但一直冲不进去,绿灯还一直亮着, 一个电子所带电荷量是多少 从地面竖直向上抛设一个物体,在落地之前,物体向上的速度v(米/秒)是运动时间的一次函数.该物体的初始速度(t=0时物体的速度)为25米/秒,2秒后物体的速度为5米/秒.(1)写出v,t之间的关系 大容量的发电机采用离相封闭母线的目的是什么 用纸杯烧水后杯底有一层柔软的黑色物质,可以刮掉,是做物理实验,为什么是柔软的 从地面竖直向上抛射一个物体,在落地之前,物体向上的速度v(米\秒)是运动时间t(秒)的一次函数,经测量,该物体的初始速度(t=0时物体的速度)为25米/秒,2秒后物体的速度为5米/秒.(1)写出v,t 等质量的下列物质中完全燃烧消氧气最多的是A CH4B C2H2C C2H6D C2H6O so2的杀菌原理是?比如谁和谁反应之类的. 如500瓦的电饭煲,在220V电压下20分钟做好饭,180V电压下30分钟做好,请问各用多少电量,计算公式是: 转向液压缸的缸径的减少,会对缸的额定压力有影响吗,或者是对液压系统有影响吗?请给我理由,急用! 二氧化硫熏蒸原理还有漂白原理(利用的性质) (1/2)一个质量为3kg的物体做直线运动,设运动距离s(单位:m)与时间t(单位:s)的关系可用函数s(t)=1+t^2...(1/2)一个质量为3kg的物体做直线运动,设运动距离s(单位:m)与时间t(单位:s)的关系可用函 小汽车每小时行63千米,小汽车的速度是载重汽车的1.4倍.它们从相距270千米的两地同时开出,相向行驶.(1)经过几小时相遇?(2)相遇时两车各行了多少千米?(3)如果出发时是8时15分,相遇时 SO2为什么能杀毒?原理是什么? 莫加偏旁组字 变速直线运动物体在某区间上所经过的路程,等于其速度函数v(t)在这个时间区间上的定积分.谁能具体解释一下这句话呀,实在不大懂 SO2熏蒸利用生成的________的漂白性填空 一个质量为3kg的物体做直线运动,设运动距离s(单位:m)与时间t(单位:s)的关系可用函数s(t)=1+t^2表示,并且物体的动能Ek=1/2mv^2,求物体开始运动后第5s时的动能. 中和含0.2摩尔HCL的稀盐酸,需NaOH的质量为多少 A.B两地相距离80千米,一辆公共汽车从A地出发,开往B地,2小时后,又从A地同方向开出一辆小汽车,小汽车地速度是公共汽车的3倍,结果小汽车比公共汽车早40分钟到达B地,求两辆车地速度 莫加偏旁组成不同的字,在组词 0.1摩尔每升的NaOH的PH怎么算,还有0.2摩尔每升的HCL的PH 电荷电流问题两验电器相接触的电流移动方向以及负电荷的移动方向, 有一个容积为48立方米的氢气储罐,当罐的压力为10公斤时请问现在罐里有常温常压下多少体积的氢气? 测中和热的实验 为什么NAOH要比HCL量多急 0.5摩尔NaOH的质量是多少克? 氢气为什么不能用钢瓶装?在未来,如果能分解水,得到氢气,那为什么不能像液化气一样,用钢瓶装? 质量百分比为5%的NaOH、Hcl溶液的摩尔浓度分别是多少 物理电流形成自由电荷自由电荷在外加电场作用下定向移动,就形成电流这里的自由点荷指正电荷吗? 40公斤蒸汽温度400用什么型号的疏水阀? 一辆客车和一辆轿车同时从甲地开往乙地,当轿车行了全程的二分之一时,客车离乙地还有五十四千米,当轿车到达终点时,客车行了全程的五分之四,甲乙两地相距多少千米? 物理学上把( )电荷定向转移的方向规定为电流方向.若30秒内通过灯丝横截面的电荷量为15C,则灯丝中的电流为( )A 山地车短途骑行120公里,需要什么样的装备?本人是一新手,准备在暑假放假时骑车回家,路程大约120公里,全程国道,路上车辆可能比较多,现在车子已经准备好了,勇士550一辆,但是没有任何骑行装 电荷量与时间的关系I=q/t,我就想问,单位时间内通过的电荷量越多,电流越大这句话对不对.初学这章,-. 纸杯可以烧水吗 单车骑行都用什么自行车?路上带哪些装备?全程600公里,大概需要多久时间?我是一个人,有什么特别需要注意的地方么?自行车的价位考虑在2K以下, 大小两辆汽车同时从甲地开往乙地.当小汽车行完全程的二分之一大汽车离甲地40千米照这样的速度继续前行 当小汽车到达乙地是大汽车行了全程的四分之三甲乙相距多少千米 某质点的位移s随时间t的变化关系是s=sint,则在t=π时的瞬时速度为 山地车 每天骑行5、60公里有什么锻炼作用?时速平均 25 电荷量与电流是什么关系 现有一质点进行直线运动,其瞬时速度与位移成反比,乘积等于10m²/s,求其速度与时间的关系式.如题,最好不要用微积分. 做直线运动的物体速度v与时间t的函数关系为v=3-2t,此函数式中选定什么物理量的方向为正方向.详细见下做直线运动的物体速度v与时间t的函数关系为v=3-2t,此函数式中选定什么物理量的方向为 大小两车同时从甲地开往乙地,当小汽车行完全程的二分之一时,大汽车离甲地还有48千米,当小汽车到达乙地时,大汽车刚好行完全程的五分之四.甲乙两地相距多少千米? 请问爱得利的塑料奶瓶烧糊了的气味有毒吗我的宝宝85天了 煮奶瓶时忘了给煮糊了 宝宝吸进了些气体 有谁知道要紧不要紧阿 已知切向加速度为a=-k^2t,求物体速率和时间的函数关系 香水 长方的菱形 瓶身深紫色 瓶盖 黑色 香水味道不是很浓郁 想知道是什么香水 好几年前还见过长方的菱形 瓶身深紫色 瓶盖 黑色 好几年前还见过 瓶身 有英文 高锰酸钾(固体)和甲醛薰蒸消毒是什么原理?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘