浮点数:长度为4字节。其中尾数高位始终为1,位的分布如下:
 1为符号位
 8为指数位
 23位尾数
符号位是最高位,尾数位最低23位,按字节保存如下:
   地址:        +0            +1            +2           +3
   内容:  MMMM MMMM         MMMM MMMM    EMMM MMMM    SEEE EEEE
其中:S:符号位,0=正,1=负
       E:指数(在两个字节中),偏移为127。
       M:23位尾数,最高位为“1”。
 例如:浮点数-12.5的十六进制为0XC1480000,它按下面方式存储:
   地址:     +0           +1           +2           +3
   内容:    0X00         0X00         0X48        0XC1
请问:如何转换,互换

解决方案 »

  1.   

    对于double和single不一样,也没去研究,以前由于对自动仪表传递数据用到,现写点起誓,希望有用type
      TSingle = Record
        b1, b2, b3, b4: Byte;
      end;
    showMessage('0X' + Format('%2X', [TSingle(-12.5).b4])+ Format('%2X', [TSingle(-12.5).b3])+
           Format('%2X', [TSingle(-12.5).b2]) + Format('%2X', [TSingle(-12.5).b1]));
      

  2.   

    i: integer;
    r: Real;
    function i_r(i:Integer): Real;
    begin
      result := StrToFloat(IntToStr(i));
    end;function i_r(i:Real): Integer;
    begin
      result := StrToInt(FloatToStr(i));
    end;加上例外处理,得了。
      

  3.   

    var
     b:byte;
    begin
    b:=TSingle(-12.5).b4;
    end;
    都运行不了
      

  4.   

    var
     b:byte;
     f: single;
    begin
      f:= -12.5;
      b:=TSingle(f).b4;
    end;
      

  5.   

    var
      str:string;
      D:integer;
      F:real;
    begin
      str:=formatFloat('00000000',F);
      D:=strtoint(str);
    end;
      

  6.   

    要想用16进制显示再加上:IntToHex(D,4);