有没有人帮忙看看这段c程序,如何转换成DELPHI的操作,是一段float  to 4Btye的算法,谢谢了main(){
float f,f2,*f3;
char c[4];
char *point;int i,j;f= 0.05;
f2=0.06;
point =(char *)(&f);        // point to flaot of first addressfor( i=0 ; i<4 ; i++)
{
   c[i]= *point;   // get one byte data each time 
   j= c[i];
   point ++;
}f3=(float *) &c[0];      //get four byte.  Set float point to memory address's first address 
f2=* f3;return 0 ;
}

解决方案 »

  1.   


    var
        f,f2:Real;
        f3:PDouble;
        c:Array[0..3] of char;
        point:pChar;
        i,j:integer;
    begin
        f:=0.05;
        f2:=0.06;
        point:=pchar(@f);
        for i:=0 to 3 do
        begin
            c[i]:=point^;
            j:=Ord(c[i]);
            inc(point);
        end;
        f3:=PDouble(@c[0]);
        f2:=f3^;
    end;
      

  2.   

    为什么不用delphi自带的move函数procedure TForm1.Button1Click(Sender: TObject);
    var
      fl:single;
      c: array[0..3] of byte;
    begin
      fl:=123.456;
      move(fl,c,sizeof(fl));
    end;
      

  3.   

      move(fl,c,sizeof(fl));
    比较好用点
      

  4.   

    强制转换赋值也可以搞定。
    var
      fl: single;
      c: array[0..3] of byte;
    begin
      fl := 123.456;
      PSingle(@c[0])^ := fl;
    end;
      

  5.   

    用变体记录似乎也不错。
    type
      TFloatByte = record
        case integer of
          0: (Value: Single);
          1: (Bytes: array[0..3] of Byte);
      end;var
      f: TFloatByte;
      f2: Single;
    begin
      f.Value := 123.45;
      f2 := PSingle(@f.Bytes[0])^;
    end;
      

  6.   

    强制转换不是很清楚发生了什么,还是move在逻辑上看得清楚一点^_^
      

  7.   

    不用赋值,直接地址映射。
    var
      fl: Single;
      c: array[0..3] of Byte absolute fl;
    begin
      fl := 123.456;
    end;╔═╤═╤═╤═╤═╗
    ║ │ │ │
    ║ │ │ │
    ║ │ │ │
    ║ │ │ │
    ║ │ │ │ │
    ╚═╧═╧═╧═╧═╝