将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
2015-12-09 23:34
267 查看
在工作中,经常使用到IEEE754格式的数据。IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样。
由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意。
今天在编程时发现需要把四个BYTE类型的数据转换成IEEE754标准的数据,就编了一个函数处理一下。
1unitUnit2;
2
3interface
4
5uses
6Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
7Dialogs,StdCtrls;
8
9type
10TForm2=class(TForm)
11edt1:TEdit;
12edt2:TEdit;
13edt3:TEdit;
14edt4:TEdit;
15edt5:TEdit;
16btn1:TButton;
17procedurebtn1Click(Sender:TObject);
18private
19{Privatedeclarations}
20public
21{Publicdeclarations}
22end;
23
24var
25Form2:TForm2;
26
27implementation
28
29{$R*.dfm}
30{将四个BYTE转换成IEEE754格式的数据}
31functionPackByteToFloat(byte1,byte2,byte3,byte4:byte):Single;
32var
33input:array[1..4]ofbyte;{定义一个数组存放输入的四个BYTE}
34output:PSingle;
35begin
36input[1]:=byte1;
37input[2]:=byte2;
38input[3]:=byte3;
39input[4]:=byte4;
40output:=Addr(input);{使用取地址的方法进行处理}
41Result:=output^;{得到了intel格式的数据}
42end;
43
44procedureTForm2.btn1Click(Sender:TObject);
45var
46byte1,byte2,byte3,byte4:byte;
47
48begin
49byte1:=StrToInt(edt1.Text);
50byte2:=StrToInt(edt2.Text);
51byte3:=StrToInt(edt3.Text);
52byte4:=StrToInt(edt4.Text);
53
54edt5.Text:=FloatToStr(PackByteToFloat(byte1,byte2,byte3,byte4));
55
56end;
57
58end.
59
从万一老师的博客上又学到了一招:
http://www.cnblogs.com/dabiao/archive/2010/02/20/1669842.html
由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意。
今天在编程时发现需要把四个BYTE类型的数据转换成IEEE754标准的数据,就编了一个函数处理一下。
1unitUnit2;
2
3interface
4
5uses
6Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
7Dialogs,StdCtrls;
8
9type
10TForm2=class(TForm)
11edt1:TEdit;
12edt2:TEdit;
13edt3:TEdit;
14edt4:TEdit;
15edt5:TEdit;
16btn1:TButton;
17procedurebtn1Click(Sender:TObject);
18private
19{Privatedeclarations}
20public
21{Publicdeclarations}
22end;
23
24var
25Form2:TForm2;
26
27implementation
28
29{$R*.dfm}
30{将四个BYTE转换成IEEE754格式的数据}
31functionPackByteToFloat(byte1,byte2,byte3,byte4:byte):Single;
32var
33input:array[1..4]ofbyte;{定义一个数组存放输入的四个BYTE}
34output:PSingle;
35begin
36input[1]:=byte1;
37input[2]:=byte2;
38input[3]:=byte3;
39input[4]:=byte4;
40output:=Addr(input);{使用取地址的方法进行处理}
41Result:=output^;{得到了intel格式的数据}
42end;
43
44procedureTForm2.btn1Click(Sender:TObject);
45var
46byte1,byte2,byte3,byte4:byte;
47
48begin
49byte1:=StrToInt(edt1.Text);
50byte2:=StrToInt(edt2.Text);
51byte3:=StrToInt(edt3.Text);
52byte4:=StrToInt(edt4.Text);
53
54edt5.Text:=FloatToStr(PackByteToFloat(byte1,byte2,byte3,byte4));
55
56end;
57
58end.
59
从万一老师的博客上又学到了一招:
相关文章推荐
- 网页图片滚动效果
- 读完了简明Python教程(a bite of Python)
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
- Linux下任务队列类
- php_1
- tempgauge测试-MQTT Over WebSocket
- Java回炉之IO流(一)
- android-make
- iOS开发52-iOS 开发者账号、Certificate(证书)、App ID、Device、Provisioning Profile(证书、App ID、设备)的学习和使用
- 如何让visusal studio 代码编辑器显示行号
- 梦龙LinkWorks协同办公平台 几处突破点
- Android Studio——layout_weight体验(实现按比例显示)
- Java回炉之File
- ImageNet Classification with Deep Convolutional NeuralNetworks( Alexnet )(待续)
- 面向对象(进阶)
- Android面试经验2
- java内部类
- LaTeX 插图片
- STM32工程
- LaTeX 插图片