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)^。
浙公网安备 33010602011771号