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

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

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

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

将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)的更多相关文章

  1. Number 强制类型转换 int 强制转换整型 float 强制转换浮点型 complex 强制转换成复数 bool 强制转换成布尔类型,结果只有两种,要么True 要么 False """bool 可以转换所有的数据类型 everything"""

    # ###Number 强制类型转换 var1 = 5 var2 = 4.85 var3 = True var3_2 = False var4 = 3+9j var5 = "888777&q ...

  2. 读取xml文件转成List<T>对象的两种方法(附源码)

    读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法, ...

  3. 取xml文件转成List<T>对象的两种方法

    读取xml文件转成List<T>对象的两种方法(附源码)   读取xml文件转成List<T>对象的两种方法(附源码) 读取xml文件,是项目中经常要用到的,所以就总结一下,最 ...

  4. 十进制浮点数转换成IEEE754标准的32浮点数的二进制格式

    参考: http://jimmygod.blog.163.com/blog/static/43511339200792605627411/ http://blog.csdn.net/archersab ...

  5. (转) 读取xml文件转成List<T>对象的两种方法

    读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法. 就以一个简单的xml做例子. xml格 ...

  6. (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...

  7. C# 数字转换成汉字大写 数值转换成汉字大写

    1.数字转换成汉字大写 public string NumToChinese(string x) { //数字转换为中文后的数组 //转载请注明来自 http://www.shang11.com st ...

  8. 将文件大小数值转换成B、KB、MB、GB

    //delphi 将文件大小数值转换成B/KB/MB/GB function FormatByteSize(const bytes: Longint): string; const B = 1; // ...

  9. 获取网络图片并显示在picturbox上,byte[]数组转换成Image:

    private void getWebPicture_Click(object sender, EventArgs e) { WebRequest request = WebRequest.Creat ...

随机推荐

  1. Java数组复制

    System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制.其函数原型是: public static void arraycopy(Object src, int sr ...

  2. leetcode Sudoku Solver python

    #the define of Sudoku is on this link : http://sudoku.com.au/TheRules.aspx Write a program to solve ...

  3. 使用ajax异步提交表单

    虽然这篇文章的标题是提交表单,但是主要的难点在于使用ajax提交文本域的内容, 在工作中的经常会需要ajax跨域的问题,通常的需求使用jsonp就可以得到解决,但是当前项目中有一个图片服务器,客户端需 ...

  4. hdu 5730 Shell Necklace fft+cdq分治

    题目链接 dp[n] = sigma(a[i]*dp[n-i]), 给出a1.....an, 求dp[n]. n为1e5. 这个式子的形式显然是一个卷积, 所以可以用fft来优化一下, 但是这样也是会 ...

  5. Eric6 右键点击生产对话框代码报错

    问题没有解决,属于菜鸟级别的孩子~~~~ 求助啊,求助!!!!!! 报告如下: Warning:An unhandled exception occurred. Please report the p ...

  6. 提高Delphi的编译速度(bpl和bcp)

    delphi的编译速度提高(一) 此博文为原创,转载请注明出处 作者 :二娃 此博文的内容我曾经回答群内和论坛内的网友提问时回答过,现在写第一部分,第二部分,我再给出一个终极的提高速度的方法 我用过d ...

  7. MFC上下浮动与渐入渐出消息提示框实现

    类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...

  8. Google Play Services Library update and missing symbol @integer/google_play_services_version

    转自http://stackoverflow.com/questions/19843784/google-play-services-library-update-and-missing-symbol ...

  9. ora-01031:insufficient privileges 解决方案

    sqlplus /as sysdba 连补上,ora-01031的解决方法: (1)检查sqlnet.ora是否包含这句话:SQLNET.AUTHENTICATION_SERVICES=(NTS),没 ...

  10. python中判断readline读到文件末尾

    fp = open('somefile.txt') while True: line = fp.readline() if not line: #等价于if line == "": ...