var
 i: integer;
 b: String;
begin 
 b := 'abcd'; 
 i := Integer(b);
 ShowMessage(String(i));
end;
就这么简单,我想知道Integer和 String内部是怎样转换的,最后能有源码或者意思。

解决方案 »

  1.   

    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
      

  2.   

    这种方法..没什么实用价值..
    楼主把B的定义放到全局变量里.
    再在ShowMessage()之前更改一下B的值..
    最后String(i)的值不是我们想要的..
    估计在Integer(b)时..i的值应该是一个新的String的指针.(为这个指针分配固定大小的空间).
    在String(i)里,再把这个指针转换成String.
      

  3.   

    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;