zoukankan      html  css  js  c++  java
  • 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)

    在工作中,经常使用到IEEE754格式的数据。IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样。

    由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意。

    今天在编程时发现需要把四个BYTE类型的数据转换成IEEE754标准的数据,就编了一个函数处理一下。

    复制代码
     1 unit Unit2;
     2 
     3 interface
     4 
     5 uses
     6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     7   Dialogs, StdCtrls;
     8 
     9 type
    10   TForm2 = class(TForm)
    11     edt1: TEdit;
    12     edt2: TEdit;
    13     edt3: TEdit;
    14     edt4: TEdit;
    15     edt5: TEdit;
    16     btn1: TButton;
    17     procedure btn1Click(Sender: TObject);
    18   private
    19     { Private declarations }
    20   public
    21     { Public declarations }
    22   end;
    23 
    24 var
    25   Form2: TForm2;
    26 
    27 implementation
    28 
    29 {$R *.dfm}
    30 {将四个BYTE转换成IEEE754格式的数据}
    31 function PackByteToFloat(byte1,byte2,byte3,byte4:byte):Single;
    32 var
    33   input:array[1..4] of byte; {定义一个数组存放输入的四个BYTE}
    34   output:PSingle;
    35 begin
    36   input[1] := byte1;
    37   input[2] := byte2;
    38   input[3] := byte3;
    39   input[4] := byte4;
    40   output := Addr(input);  {使用取地址的方法进行处理}
    41   Result := output^;      {得到了intel格式的数据}
    42 end;
    43 
    44 procedure TForm2.btn1Click(Sender: TObject);
    45 var
    46   byte1,byte2,byte3,byte4:byte;
    47 
    48 begin
    49   byte1 := StrToInt(edt1.Text);
    50   byte2 := StrToInt(edt2.Text);
    51   byte3 := StrToInt(edt3.Text);
    52   byte4 := StrToInt(edt4.Text);
    53 
    54   edt5.Text := FloatToStr(PackByteToFloat(byte1,byte2,byte3,byte4));
    55 
    56 end;
    57 
    58 end.
    59 
    复制代码
    从万一老师的博客上又学到了一招:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormCreate(Sender: TObject);
    var
      aa:record b1,b2,b3,b4:Byte end;
      bb:Single absolute aa;
    begin
      aa.b1 := $CD;
      aa.b2 := $CC;
      aa.b3 := $44;
      aa.b4 := $41;
      ShowMessagefmt('%f',[bb]);
    end;

     

     
    http://www.cnblogs.com/dabiao/archive/2010/02/20/1669842.html
  • 相关阅读:
    开博说两句
    学习总结 (持续更新)
    ip代理 120203
    [vs2005]关于预编绎网站的问题[已预编译此应用程序的错误]
    JAVA类基础
    集合类和泛型
    IO流——字符流
    多线程和包
    多态和内部类
    抽象类与接口
  • 原文地址:https://www.cnblogs.com/findumars/p/5034701.html
Copyright © 2011-2022 走看看