Delphi 单精度浮点数与字节数据的相互转化处理

最近看modbus的协议需要用到浮点数的转换,原本想着还要照着IEEE的浮点数结构自己来搞,Google下原来有更好的解决方案,粘贴下来以备不时之需,贴代码(代码仅作示意,自己整理下) :

1、字节数组转为Single,传入参数自己处理下,嘿嘿

function BytesToSingle():Single;
var
  bSingle:array[0..3]   of   byte;
begin
//49E48E68
  bSingle[3]   :=   $49;
  bSingle[2]   :=   $E4;
  bSingle[1]   :=   $8E;
  bSingle[0]   :=   $68;
  Result := PSingle(@bSingle[0])^;
end;

2、Single转为字节数组

function SingleToBytes():TBytes;
var
  f:single;
  bSingle:array[0..3] of byte;
begin
  f:=1872333;
  Move(f,bSingle,sizeof(f));
  Result := bSingle;
end;

SingleToBytes的另外一个版本:

function SingleToBytes():Tbytes;
var
    n   :   Single;
    bSingle:array[0..3]of Byte;
begin
  n:=1872333;
  bSingle[0] := (PByte(@n)+0)^;     //第一位的值
  bSingle[1] := (PByte(@n)+1)^;     //第二位的值
  bSingle[2] := (PByte(@n)+2)^;     //第三位的值
  bSingle[3] := (PByte(@n)+3)^;     //第四位的值
end;

注意Delphi早前的版本好像不支持PByte运算,可以如此PByte(PChar(@n)+0)^。

posted on 2010-12-14 16:19  JonyOang  阅读(2054)  评论(0)    收藏  举报

导航