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

verlongan 2004-12-27 05:49:18
var
i: integer;
b: String;
begin
b := 'abcd';
i := Integer(b);
ShowMessage(String(i));
end;
就这么简单,我想知道Integer和 String内部是怎样转换的,最后能有源码或者意思。
...全文
64 点赞 收藏 6
写回复
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!想知道!
回复 点赞
发动态
发帖子
非技术区
创建于2007-08-02

587

社区成员

5.4w+

社区内容

Delphi 非技术区
社区公告
暂无公告