如何在delphi中实现用IEEE754(4字节二进制浮点数格式)规约的电表的数据显示?求指教,在线等!!!

解决方案 »

  1.   

    字节数组转浮点?用指针或联合结构都可以  //单精度浮点数(4字节)
      TSingleRec = record
      case Integer of
      0:(Value:Single);
      1:(bLL,bLH,bHL,bHH:Byte);
      end;或var
      bArray : array [0..3] of byte;
      aFloat : Single;
    begin
      bArray[0] := ..
      bArray[1] := ..
      ...
      aFloat := PSingle(@bArray)^;
    end;注意高低位顺序,电脑中的字节顺序是低到高
      

  2.   

    function dbds(firstnum,secnum,thirdnum,forthnum:Byte):Extended;     //自定义函数电表
    var
      Ex,i:Byte;
      m:Single;//Cardinal;
      recnum:Extended;
    begin
       m:=1;
       Ex:=(firstnum shl 1)+(secnum shr 7);
       if ((secnum shr 7)=1) then
        secnum:=secnum
        else secnum:=secnum+128;
        if (Ex<=(126+24-31)) then
        begin
          recnum:=0;
        end
        else if(Ex<(24+126))then
        begin
          for i:=1 to (24+126-Ex) do//(i:=(24+126-Ex);i>0;i--)
          begin
          m:=m*2;
          end ;      recnum:=(secnum*$10000+thirdnum*$100+forthnum)/m;
          m:=1;    end
        else if(Ex>(24+126))then
        begin
          for i:=1 to (Ex-24-126) do//(i:=Ex-24-126;i>0;i--)
          begin
           m:=m*2;
            end;       recnum:=(secnum*$10000+thirdnum*$100+forthnum)*m;
          m:=1;
        end
        else if(Ex=24+126) then
         recnum:=secnum*$10000+thirdnum*$100+forthnum;
        m:=1;
        dbds:=recnum;
    end;问题我解决了,这是我编的,不过还是谢谢了!!
      

  3.   

    无语,看来你没看懂三楼的回复IEEE754(4字节二进制浮点数格式)就是Single,直接取值就是,还需要什么转换?
      

  4.   

    一、按通讯规约定义结构:
      TXXXFrame = packed record
        StartFlag: Byte;                    //68H
        A: Integer;                         //整数
        B: Single;                          //浮点数
    //其他字段定义...
        EndFlag: Byte;                      //16H
      end;
      PXXXFrame = ^TXXXFrame;二、定义一个接收数据的缓冲区:
    FBuffer: array [0..255] of Byte;    三、使用:
    var
      P: PXXXFrame;
      I: Integer;
      j: Single;
    begin
      P := @FBuffer;
      //取整数
      I := P.A;
      //取浮点数
      J := P.B;
      //其他处理end;