说简单吧,但确的也会难倒人

verlongan 2004-12-27 05:49:18
var
i: integer;
b: String;
begin
b := 'abcd';
i := Integer(b);
ShowMessage(String(i));
end;
就这么简单,我想知道Integer和 String内部是怎样转换的,最后能有源码或者意思。
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw549 2004-12-27
  • 打赏
  • 举报
回复
Unit1.pas.32: i := Integer(b);
00452286 8B45F8 mov eax,[ebp-$08]
//[ebp-$08]这里存放b的指针,指向的内容为'abcd'

00452289 8945FC mov [ebp-$04],eax
//[ebp-$04]这里存放i的内容,mov后, i =@b
//////////////////////////////////////////////
//例子如下
var
i: integer;
b: String;
P: PChar;
begin
i := 1;
b := 'abcd';
i := Integer(b);
P := Pointer(i);
ShowMessage(IntToStr(i));
ShowMessage(IntToStr(Integer(p)));//结果同上
ShowMessage(String(i));
ShowMessage(P);//结果同上
end;
10975037 2004-12-27
  • 打赏
  • 举报
回复
这种方法..没什么实用价值..
楼主把B的定义放到全局变量里.
再在ShowMessage()之前更改一下B的值..
最后String(i)的值不是我们想要的..


估计在Integer(b)时..i的值应该是一个新的String的指针.(为这个指针分配固定大小的空间).
在String(i)里,再把这个指针转换成String.
纯冰糖 2004-12-27
  • 打赏
  • 举报
回复
我学习学习...
lw549 2004-12-27
  • 打赏
  • 举报
回复
没有做任何转换,仅仅是传一个地址,为应和语法
lw549 2004-12-27
  • 打赏
  • 举报
回复
Unit1.pas.31: b := 'abcd';
00452279 8D45F8 lea eax,[ebp-$08]
0045227C BAC0224500 mov edx,$004522c0
00452281 E84620FBFF call @LStrLAsg
Unit1.pas.32: i := Integer(b);
00452286 8B45F8 mov eax,[ebp-$08]
00452289 8945FC mov [ebp-$04],eax
Unit1.pas.33: ShowMessage(String(i));
0045228C 8B45FC mov eax,[ebp-$04]
0045228F E81091FDFF call ShowMessage
ygflydream 2004-12-27
  • 打赏
  • 举报
回复
up!想知道!

829

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧