现在要移植和改写 IntToStr 和 FloatToStr的汇编代码为  为新的嵌入代码,以便提高效率
就是把结果直接写到已经有的给定缓冲区,注:程序版本d7

解决方案 »

  1.   

    改变Delphi自带pas文件当中的定义?
      

  2.   

    ? delphi原生代码不就是汇编么,何必重复劳动
      

  3.   

    你看懂SysUtils单元里,IntToStr,FloatToStr的实现再说吧
      

  4.   

    就是把写到单元里缓冲区,变成写到 现在成的缓冲区首地址的位置,并记录写入的长度,避免数据的复制提高效率
    原asm代码看不懂
      

  5.   

    哦,
    我告诉你了,避免字符串的再复制,直接写到目的区域中!
    而且,asm中已经有了字符串的长度,如果我再取字符串的长度,这些不影响效率吗当我不知道delphi的代码能编译为程序的时候,没有人告诉我:既然你不会,你怎么知道代码能有用呢?
    这个问题你问得好,因为我现在确实回答不了
    接近一点平民好不好?不要告诉我提高不了效率!!!
      

  6.   


    大家都菜过;关键是提出问题就是进步的第一步;如果只是要STRING 长度避免复写的话可以使用下面的代码直接取长度,估计没有什么比读下内存有效了;procedure TForm1.Button1Click(Sender: TObject);
    var
      k:Integer;
      Str:string;
    begin
      K:=333456;
      STR:=IntToStr(K);
      Edit1.Text:=IntToStr(Pinteger(Integer(Str)-4)^);
    end;
      

  7.   

    补课:STRING 的结构 4字节(引用计数)4字节(串长度)。N字节。#0
      

  8.   

    这个,,,有点麻烦了吧?搞清楚数据类型在内存中的存储方式,使用API函数:CopyMemory就可以实现,不过最好的还是使用系统提供的函数,稳定,好用,为什么不用??
      

  9.   

    给点范围吧:var 
    str:string;
    pb:pbyte;
    Pos:integer;setlength(str,256);
    pb:=@str[0];//字符串长度for i:=0 to 1000000 do
    begin
    pos:=1;
     inttostr(x);///这句要求写到 str[pos]这个缓冲区中 换成 asm
    inc(pox,?);//这句要求在汇编中直接写好,应当是上面asm中现成的吧?
    str[pos]:='c';
    inc(pos);
    floattostr(x);///这句要求写到 str[pos]这个缓冲区中
    inc(pox,?);//这句要求在汇编中直接写好,应当是现成的吧?
    inc(pos);
    str[pos]:='d';
    pb^:=pos;///到此字符串str已经完成
    Write(str);//自定义函数
    end;