delphi有inttohex,可浮点数怎么解决?另外,逆转换如何实现?

解决方案 »

  1.   

    写完了,适用带小数有理数的转换,适用负数// 10进制整数 转 2进制整数
    function IntToBin(aInt: Int64): String;
    var
      vFlag: Boolean;
      vBit: Shortint;
    begin
      vFlag := aInt < 0;  repeat
        vBit := aInt mod 2;
        aInt := aInt div 2;
        Result := IntToStr(Abs(vBit)) + Result;
      until aInt = 0;  if vFlag then
        Result := '-' + Result;
    end;// 10进制纯小数 转 2进制小数
    function DecimalToBin(aDec: Double): String;
    var
      vDoubleIt: Double;
    begin
      aDec := Frac(Abs(aDec));
      if aDec <> 0 then
      begin
        vDoubleIt := aDec * 2;
        Result := IntToStr(Trunc(vDoubleIt)) + DecimalToBin(vDoubleIt);
      end;
    end;// 10进制有理数 转 2进制有理数
    function FloatToBin(aFloat: Double): String;
    var
      vInteger: Int64;
      vDecimal: Double;
    begin
      vInteger := Trunc(aFloat);
      vDecimal := Frac(aFloat);
      Result := IntToBin(vInteger) + '.' + DecimalToBin(vDecimal);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Edit2.Text := FloatToBin(StrToFloat(Edit1.Text));
      except
        MessageBox(Handle, '请输入合法有理数', '错误', MB_OK);
      end;
    end;
    ---------
    Function FloatToBin(Value: Real): TChar8;
    Asm
       LEA  ECX, Value;
       MOV  EDX, [ECX];
       MOV  [EAX], EDX;
       MOV  EDX, [ECX+4];
       MOV  [EAX+4], EDX;
    End;Function BinToFloat(Value: TChar8): Real;
    Asm
       MOV EDX, EAX
       LEA EAX, Result
       MOV ECX, [EDX]
       MOV [EAX], ECX
       MOV ECX, [EDX+4]
       MOV [EAX+4], ECX
    End;