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

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;

Office将更强大:微软正开发Office Reader和Office Lens 百度技术专家详解Clouda 并称计划推出相应UI解决方案 少年才俊:看IT界8个不到20岁的科技公司创始人 Oracle与Freescale展开深度合作,Java或将一统物联网? 探秘Google新搜索引擎算法Hummingbird的16个疑惑 如何在开发项目里进行自我激励! 或许很受用:苹果、谷歌和亚马逊等公司的14个怪异面试题 12款不容错过的新款jQuery插件 技术开发者如何看实时Web App开发框架? 高薪技术排行:大数据居首,苹果相关次之,Java、C等相去甚远 谷歌开发网络跟踪新技术:AdID将取代第三方Cookie 穿在脚上的苹果?苹果聘用Nike设计主管Ben Shaffer 七款Debug工具推荐:iOS开发必备的调试利器 六年亲历,见证中国大数据技术与应用时代的到来 Mailbox:日支撑过亿信息数据库的性能调优及集群迁移 PayPal前CTO 在美国改变世界的乌克兰犹太人 放弃Bootstrap&amp;amp;Foundation,迎接Semantic UI? 一键分享:iOS版Google+发布SDK InMobi杨娟:中国移动游戏如何挑战全球? Adobe再遭APT攻击:数十G源代码及290万用户信息失窃 程序员,如何在工作中崭露头角? 国内外三个不同领域巨头分享的Redis实战经验及使用场景 这是一场潜在的战争:谷歌与Facebook、苹果在搜索上的博弈 设计新闻类网站需要注意的关键点:移动友好、宽带…… 直接开始用:5个免费的在线思维组织工具 招聘开发者常见的九大误区 开源影响销售,维护赞助商? 盘点黑客攻击途径:最常用的7个策略及简单的防护方法 专访AngularJS框架创始人Misko Hevery:让Web开发更便捷 果粉的又一个节日:新iPad或于10月22日发布 新车间李大维:到集装箱里来看创客嘉年华 英文cuteftp为何中文显示为乱码? 汉化cuteftp却显示英文为乱码? 这个问题真头疼! 在XML中,如何显示一个图像 编程菜鸟急急急——关于autocad的一个插件!! winxp家庭版中是否有IIS,有的话在哪里安装,我在添加windows组件中怎么找不到?在线! js中有没有类似php中的basename 和 explode 方法 hook 问题? help,我一哥们光荣下岗,有做java项目又缺pm的请帮忙 简单问题,怎么才能把这个函数的返回值转换成字符串放在一edit1.text中。50分 关于控制窗口的问题! 如何关闭数据库连接? 救命!!WINDOWS启动错误 Java应用程序,汉字显示成方格...... 高手请进 高手请进 开发的结局,一个美丽的谎言!!! 发邮件! 请问! 请问各位高手:汉字转换为拼音,怎么转换? 如何模拟窗口最小化? 怎样才能最有效率的得知RESULTSET对象中没有记录呢? 有谁知道PC104的结构,芯片,CPU等的情况,和适合开发什么应用? MFC dll中 一用了ActiveMovieControl别的程序就不能调用了,怎么解决? 如何在BCB中建立视图? 那天,我被扎了一针 rad hat能不能与windos联机啊、? 惨啊,要跳楼了,谁能帮忙,关于内存泄漏的问题 请问在那里下载VtoolsD开发工具? 为什么ASP页面总是报“HTTP 500 - 内部服务器错误 ” 請問:TC2.0中有無類似于API GetPrivateProfileString()的函數? VB 中如何判断一个对象变量是否被赋值 请问作为标识字段用什么格式好?见者有分!!!! 诚心求教:MDI多视图之间的成员函数调用问题。 请推荐一些有关.net平台的优秀书籍 加密字符串的问题 win2000下无法正常使用localhost来浏览asp页? ★★★如何将一个数字转换成英文写法?急急急!!!★★★ 关于FTP站点下载得问题。。。 STL中有没有左高树?或者菲薄那契堆? 目前,主流的B/S结构的数据库前端开发工具是什么?哪个最有前途? 给我个喜欢VC放JAVA的理由先! 如何解决两个tabpage互换时,tabpage上的控件因检索大量数据而闪烁。 有关dll在设备驱动中的问题。急,在线等待。多谢多谢!! 一个字符串常量"aaa=",一个字符串指针char *m_buffer="bbb",怎样相加得到"aaa=bbb".谢谢! 54beginner java文本框的问题 谁有Dream控件的原码(200分酬谢) 在php+mysql中能不能把数据库文件放到别的目录下! 急 求援!有谁在看<<c++大学教程(第二版)>>电子工业出版社,一道题难住了. 这是为什么???? delphi程序最小化后如何常驻内存执行(在屏幕右下角)? 用sql语句怎样创建自动编号的字段 《海洋——21世纪的希望》课文围绕海洋能够为人类提供( ),( ),( ),以及在海底( )这……快!《海洋——21世纪的希望》课文围绕海洋能够为人类提供( ),( ),( ),以及在海底( )这几个 得到地图上的面积实际面积是怎么计算的 有105枚硬币,有一枚假硬币,不知假币比真币轻还是重,利用天平至少称几次就可以判断假币比真币重还是轻?五年级下册《西部教程》数学 上的,请各位数学达人集思广益,多多指教!我感激不尽! 请问净水器是买RO机好还是超滤机好? 《海洋 21世纪的希望》中课文是抓住哪些要点来说明海洋是人类二十一世纪希望的? 关于x的方程ax+b=bx+a(a不等于b)的解为_________________. 为什么说海洋-----是21世纪的希望呢? 现有一个盛有大半瓶饮料的平底可乐瓶(如图)给你一把刻度尺,一根细线,试测出这个可乐瓶的容积.写出操作步骤及计算容积的数学表达式. 关于X的方程AX-B=BX-A(A不等于B), 小亮将20g糖放入180g水中,溶解均匀后,他喝了糖水的5分之1,喝掉的糖水里面含有( )g的糖小亮将20g糖放入180g水中,溶解均匀后,他喝了糖水的5分之1,喝掉的糖水里面含有( )g的糖?把答案写一 《海洋—21世纪的希望》这篇文章告诉我们( ). 关于x的方程:ax-m=bx+n (a不等于b) 关于x的方程 2x-[2-(2b-1)x]=a-2关于x的方程 |x|+|x-2|=6关于x的方程 |x|-x=5关于x的方程 b(a+2x)-a=(b+2)x+ab回答请把步骤写全 把10g糖溶解在50g水中,这时糖和糖水的质量比是(). 海洋——21世纪的希望 课文内容 解关于x的一元一次方程:ax=3(a不等于0)(2)3x+b=2b-x(3) ax+2=3x-3(a不等于3) 把20g糖溶解在180g水中,糖水的含糖量是()% 一个圆柱体 上端是不规则瓶口 瓶子装有大半瓶水 请你选用合适的器材测出瓶子的体积 交BC于F 求证 D到PE的距离与D到PF的距离相等. 9枚金币有一枚为假稍轻,问用天平最少需几次将假币分出? 某养殖场养黑兔和白兔,其中白兔比黑兔多八分之一,黑兔比白兔少24只.黑兔有多少只? 小明想测瓶子中的容积,但他手边只有一把刻度尺,请帮他想想办法 番茄中的水分大约占80%,糖3%,5千克番茄中含水,糖各多少千克? 养殖场的黑兔只数是白兔的3倍,白兔比黑兔少14只,白兔,黑兔各多少只? 超滤净水机和纯水机的区别是什么? 恐怕明天要下雨了,我们的旅游计划要取消了.这句话怎样翻译成英语 留言条的格式和内容内容是小亮约小雨明天去书店买书,可小雨正好出去了 微积分, 用英语给老板写一张留言条 留言条的格式? 请写出xδ(x)=0,δ(x)=δ(-x)在积分意义上的表达式, 有9枚金币,其中有一枚是假的,它比真币要稍轻一点,用没有砝码的天平至少称几次,就可以找出假币? 金丝猴有什么特别的本领? 积分时,被积表达式中dx是什么意思? 有13枚金币,其中一枚是假币比真币一些,你能在天平上称三次(不用砝码)就能把假币找出来吗? 养殖场有黑兔和白兔共180只,白兔的数量是黑兔的5倍.养了黑兔白兔共多少只? 现有一台天枰,只有三个非别,12克、8克、9克的砝码,让你一次就称出15克黄金来,怎么称,写出算式. 1.有15枚金币,其中一枚是假的,外观和真的一样,只是假金币较轻.你能在天平上称3次(不用砝码),就把假金币找出来吗?把你的方法写下来. 养殖场养的黑兔只数是白兔得3倍,白兔比黑兔少14只.白兔、黑兔各多少只? 方程Ax=B的解有如下三种情况 1.A=0 B=0 方程AX=B有无数个解,2.当A=0 B不等于0时方程无解.3.当A不等于0,方程AX=B有一个解 请你用上面所学到的知识解答下面问题,关于x的方程mx+2=x=n ,有无数个解 求m+n 被足球运动员踢出去的足球在空中作曲线运动,下列表述正确的是( ) A、足球在空中作曲线运动,被足球运动员踢出去的足球在空中作曲线运动,下列表述正确的是( ) A、足球在空中作曲线 ax+b=0 a不为0 a,b为相反数.x等于? n元线性方程组AX=b有唯一解的充要条件是?A、A为方阵且|A|不等于0 B、导出组AX=0仅有零解 C、秩(A)=nD、系数矩阵A的列向量组线性无关,且常数向量b与A的列向量组线性无关 有7枚外形完全一样的金币,其中一枚是假的,它比真金币轻一些.不用砝码,你能利用天平把假金币找出来吗?写出你的方法 中文留言条格式, 求证:关于x的方程x^2+ax+1=0有两个正实数根的充要条件为a小于等于-2. 求英语文章:1.关于海洋的 2.有翻译的 计算机中汉字输出是以___的形式.A 内码 B 字形码 C 交换码 D 外码 海洋——21世纪的希望 摘抄能概括这段文字的主要内容1.海洋的喜表现在1()2()海洋的怒表现在1()2()3() 世界著名的海洋动物博物馆 英文怎么翻译呀? 汉字有多少个国家在使用,都有哪种形式? 留言条用英语怎么写?留言条王老师:由于我家里有事明天回家一趟,能否将我们的见面推迟一天?对此带来的不便深感抱歉.留言人:黄静琴2011年06月06日 大学物理实验报告后思考题实验内容的第4步要求“听到放气噗噗声刚一结束,立即关闭放气阀,”为什么?如果关闭较晚会有什么后果? 汉字最初是以什么形式出现的? 怎么计算地图面积、 牛顿环思考题利用透射光观察牛顿环的干涉条纹和用反射光观察的干涉条纹有何区别? 中文书信格式.急.此致定格写还是敬礼定格写.1还是21)此致敬礼2) 此致敬礼 物理中地图上怎样表达方位 有15枚金币,其中一枚是假币(假币轻些),用天平最少称()次能保证找出这枚假币 课文是从哪几方面说明了海洋是人类21世纪的希望?六下13课同步63页. 怎样在百度地图上测算两个城市建成区面积? 有101枚硬币,其中100枚质量相同,另一枚是假币,利用天平,至少称几次就一定能判断假币比真币重还是轻.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘