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

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;

陈昊芝:腾讯!让我说你什么好? Top Paid与Top Grossing定价策略的差异 Android版百度云推送正式发布 为何开发者应推动公司开源? 从AppGratis被下架说起,苹果或将再次付出代价 58同城的“烦恼”——8K月薪安全工程师引发的入侵 软件开发实践的24条军规 思科 IBM 微软等巨头联合开发开源SDN项目OpenDaylight 巾帼不让须眉:2012年度云计算领域Top 10女性 中移动全力推进NFC 5月起乘公交可刷手机 支持Android与iOS,Qt 5.1 Alpha全新亮相 Google Play:劣质Android应用已无藏身之地! 360推出信用网站认证开放平台 联合百家协会围剿钓鱼网站 经验分享:百度测试架构师眼中的百度QA(一) 在线旅行服务行业开放API带来的新机遇 专访:悬疑恐怖游戏Year Walk美术及音效设计师 解密:微软都柏林数据中心的神秘“免费冷却”装置 云计算如何影响数字化营销? 榜单:十位帮我们打理数据的存储大佬 OpenStack Grizzly版发布 Comcast、CERN成为新会员 谷歌携Blink来势汹汹 WebKit将成明日黄花? 星巴克与苹果合作 顾客可免费下载付费App 微信回应信令争议 将启动2.5G网络优化计划 凤凰网CTO吴华鹏离职 先后供职长达10年 外媒:开发者每周编码时间仅19.1小时 AppGratis CEO现身说法:应用被苹果儆杀始末 一个Web设计师眼里的云计算 戴尔高管:服务器业务领先惠普五年时间 Hoodie:基于JS与CouchDB的超快速Web开发框架 设计优秀API的五大规则 盘点英特尔IDF2013第一天:技术产品新趋势 ?有没有啊 以下程序的输出值是 哪位朋友知晓如果Table与DbGrid绑定后,如何实现非第一索引的排序。 请问MSDN有中文版的吗?我们这的全是英文版的 我的 Win2000 出大问题了,急盼各位大虾赐教 请问那里有VB.NET软件下载呀 什么delphi命令可以打开网页呢? 到底有没有人知道如何可以在panel中动态的调用frame或者是form呢? 哪里有windowsXP下载? 送我能给的最大分,请教很小的问题,中高手进 聊天请进(thinkingdog) 大家来谈谈 IBM都有些什么认证???什么认证现在比较吃香???谢谢!!! 打印数窗问题求助! 如何使用UrlDownloadtoFile下载文件使用进度条? 如何用在两次用getTime()中得到两个不同的时间。 一个类似于牛角尖的问题(多余的CONST),不能忽视,请各位高手详细说明!!谢谢! 怎样读写注册表,每次都不成功,气死我也~! 各位救命啊,用 TClientDataSet.Load XML 的问题。。。。 娃呀呀,pb8怎么这么难安装?jaguar组建就用了5分钟,regester window又用了10分钟,重启动后,还没完,偶不敢装了,把碟退了出来,大家是不是也这样?//牛虻 请教高手一个ado的问题. 请问一个TWebBrowser的问题 请问:系统崩溃后,找不到BOOT,系统告诉:DOS基本分区为格式化?无法引导启动! 在VB.NET的tabcontrol上放置AxMSFlexGrid控件问题,急 java3D 现在大家是用Oracle 8还是 Oracle 9??? C++问题求助! 请教一个错误的原因. 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版 SCJP里的那些什么300-020,020是什么意思啊? 请问一个关于document.write()方法的问题。急啊! 初学者,欢迎灌水。 Delphi6的Bug?不兼容? 为什么我用GetProfileString()却总是得不到结果 sos 请教各位大侠一个问题 delphi6中的installShield 请介绍接收端CRC校验传输内容是否正确的方法,资料或代码。谢谢! 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版? 谁会做软件狗?有钱赚了!!! 为什么我用QuickRep作的报表只能显示一条记录,而且columnHeaderBand上内容也显示不出来 请问在税务局开发数据库的同行么?? 大家好各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版? 谁做过软件狗,马上来拿钱!!! 江苏省的成绩什么时候可以出来啊,我是徐州的 shockwaveflash没有hwnd,怎么办? chechy(chechy) 你在吗? 一个关于用excel做的日报的问题 谁会做软件狗,马上来拿钱!!! 给你下跪了,给你磕头了,给你鞠躬了。很简单的问题。谢谢 那位大哥能告诉我在VC中我要创建类的话应该做哪些工作步骤(要详细的,呵呵) 紧急求救,asp连接mysql问题 在使用twebbrowser的时候,怎样制止网页的自动刷新和跳转? 压力容器A/B/C/D分类具体是指什么意思?A与D有区别是什么? 不同季节正午太阳光下物体影子的长度有什么特点?为什么? l正午时我们在太阳底下的影子长度比下 午时我们在太阳底下的影子的长度 ( ) A. 要长 B. 不变 C. 要短 D, 一年的正午学校旗杆的影子在旗杆的什么方向为什么 【化学变化】牛奶和醋放在一起有什么变化?再喝下去呢? 射线b级检测,焊缝是否要磨平 某学校操场上,在O处立有一旗杆,OP是正午时旗杆在地上的影子,影子长度经常变化,当6月22日时影子缩短为0.M有棵树,OM与OP相垂直.(1)旗杆所处纬度为_______,因为____________________________,到________ 某地有一幢楼,楼房高度为h,太阳高度角为a,楼间距和正午的影子为S,回答4-5题.4.若在12月22日,正午影长与楼房高度相同,该地的纬度是:( )①23°26¢N ②21°34¢N ③25°26¢N ④68°26¢ 紫铜管钎焊焊缝能用射线检测吗 太阳升起与太阳落下时影子最( ),但方向( ),正午时影子最( ). 干冰在人工降雨时所发生的物态变化仔细一点应该好像有四种吧 延长记号是什么样子 用“正午太阳偏南,物体的影子指北”来判断方向,只要正午可以见到太阳,那么任何时候都符合上述规律的地区是A.全球各地B.南半球中纬度地区C.北半球纬度地区D.北半球下列词语,从地质学观 用干冰人工降雨发生了哪些物态变化? 右下图是中国节水标志,用简练的语言写一段解说文字,向同学和家人解说图案的构成要素、造型特点.右下图是中国节水标志,请仔细观察,用简练的语言写一段解说文字,向同学和家人解说图案 北京旗杆正午时的影子方向是()8月8日 请问这个焊接符号是代表什么意思?还有a 1.5 是什么意思 音乐中的休止符号是什么样子? (初二物理题)干旱时,要实施人工降雨必须具备什么样的天气条件?实施人工降雨时常向高空抛撒干冰,请问干冰的作用是什么? 这个焊接符号代表什么意思? 俄罗斯东部西伯利亚地区的三大河流,自东向西依次是 压力容器新的分类方法新容规说的你这是旧的容规 若北京天安门广场的旗杆影子最短,求北京时间 纸袋包装的牛奶和普通包装牛奶有什么区别 为什么牛奶滴进醋里会变成那样?你去试试? 关于旗杆影子的问题一天中,在早晨,中午,下午分别观察操场上的旗杆影子长度,有什么样的变化?为什么会有这样的变化?在一年中的不同季节,观察中午时刻的旗杆影子,又有什么不同?说出产生 牛奶塑料袋包装的和枕包(纸袋)的有什么区别吗?主要是在牛奶的质量上有区别吗? 西伯利亚地区有哪些民族,为什么苏联解体了,俄罗斯联邦还存在呢?为什么不把中国元朝时期就属于中国的领土:西伯利亚、外蒙古、 库页岛、唐努乌良海、新疆西北等地,归还中国统治呢? 太阳光和地面的夹角叫_________.一天中,旗杆影子的长度最短的时间是太阳在最高的位置———中午的时候,. 枕包装的牛奶和塑料袋包装的牛奶有什么区别?比较起来,枕装的比塑料袋装的贵在哪里? 久旱无雨时,人们就要实施人工增雨——在云层中撒些干冰,达到人工降水.试解释这么做的道理. 在天安门广场上的旗杆你知道哪一天影子最长哪天最短为什么 A,B,C,D级压力容器划分与一二三类压力容器的划分有什么区别 久旱无雨时,人们就要实施人工降雨——在云层中撒些干冰,达到人工降雨,能解释这么做的道理吗?干冰即(固体二氧化碳) 一年之中,旗杆的影子每天12点时一样长吗?什么时候最长 压力容器b类焊缝要百分之多少射线探伤 当把干冰撒在空中时,干冰进入云层,很快什么为气体. 为什么俄罗斯西伯利亚地区三大河流的下游几乎没有农田RT 压力容器筒体对接,平焊缝,纵焊缝,(A,B类焊缝)可以用二氧气保焊焊接? 在同一时间,同样高度的建筑物,在下列哪个城市中它的影子最长A.深圳B.宁波C.杭州D.北京 俄罗斯西伯利亚地区三大河流为何自南向北流? 仿写例句,续写句子.例:春天的雨,细腻而轻柔,给山野披上美丽的衣裳续写 秋天的雨冬天的雨谢, 在同一时间,同样高度的建筑物,在下列哪个城市中它的影子最长( )A.深圳 B.宁波 C.杭州 D.北京 俄罗斯西西伯利亚地区的三大河流(鄂毕河,叶尼塞河,勒拿河)为什么自南向北流? 仿照例句,再续写两个句子.春天的雨,细腻而轻柔,给山野披上美丽的衣裳;夏天的雷,迅疾而猛烈,为生命敲响热烈的战鼓;秋天的风,_________,________________;冬天的雪,_________,________________. 在同一时间,同样高度的建筑物,在下列哪个城市中的影子最长() A 深圳 B宁波 C杭州 D北京在同一时间,同样高度的建筑物,在下列哪个城市中的影子最长()A 深圳 B宁波 C杭州 D北京 干冰很容易发生哪种物态变化? 袋装牛奶如果放在杯子里加热水热一下,这样会因为塑料袋加热而产生什么毒素嘛? 科学选择题:在同一时间,同样高度的建筑物,在下列哪个城市中它的影子最长?A.深圳B.宁波C.杭州D.北京 为什么俄罗斯亚洲部分的三大河流中下游几乎没有农田 俄罗斯西伯利亚三大暖流自南向北流的原因是?还有两个问题:为啥每3、4月份,三四月份会出现河水泛滥,河流两岸形成大片沼泽地,这是河水不会全部注入北冰洋的原因是?、三条河流下游却没 在同一时间,同样高度的建筑物,深圳,宁波,杭州,北京哪个城市的影子最长 什么季节正午房屋影子最长?太阳斜射在?几次?什么季节正午房屋影子最短?斜射在?几次 中午12点时太阳底下人的影子()A最长 B最短 C不变 牛奶醋需要什么牛奶跟醋混合来喝对减肥比较好! 不同季节正午太阳高度下影子的长度 中午12点在太阳底下人的影子是( ).A最长 B最短 C不变 D无法确认 压力容器一、二、三类是怎么分类的 牛奶倒入醋为什么会发生变化 RT射线检测管道焊缝的防护问题咱是新手,刚来不到一个月.我看这里检测焊缝时候,人在10米外左右,射线头是放在架子上向下对着管子的,这样子不会射到人的么?为什么公司说的时候挺夸张的.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn