var
i: integer;
b: String;
begin
b := 'abcd';
i := Integer(b);
ShowMessage(String(i));
end;
就这么简单,我想知道Integer和 String内部是怎样转换的,最后能有源码或者意思。
i: integer;
b: String;
begin
b := 'abcd';
i := Integer(b);
ShowMessage(String(i));
end;
就这么简单,我想知道Integer和 String内部是怎样转换的,最后能有源码或者意思。
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
楼主把B的定义放到全局变量里.
再在ShowMessage()之前更改一下B的值..
最后String(i)的值不是我们想要的..
估计在Integer(b)时..i的值应该是一个新的String的指针.(为这个指针分配固定大小的空间).
在String(i)里,再把这个指针转换成String.
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;