因工作需要,把再串口通信中浮点数与字节流的数据转换函数放在这,转发的,谢谢原作者。

今天花了一天的时间搜罗资料,为了解决一个串口编程的进制转化问题。因为串口传送的浮点数据格式与IEEE-754标准(32)有关。此标准长度为32位,四个字节的浮点数据传送顺序为先低字节后高字节,作为8个ASCII码传送。格式:D31符号位(1位表正负),D30~D23价码(8位),D22~D0尾数(23位)。

希望能够研究此块的同行们提供些帮助,下面是C#的转化方法:

         /// <summary>
/// 将二进制值转ASCII格式十六进制字符串
/// </summary>
/// <paramname="data">二进制值</param>
/// <paramname="length">定长度的二进制</param>
/// <returns>ASCII格式十六进制字符串</returns>
public static string toHexString(intdata, int length)
{
stringresult = "";
if (data> )
result = Convert.ToString(data, ).ToUpper();
if(result.Length < length)
{
// 位数不够补0
StringBuilder msg = new StringBuilder();
msg.Length = ;
msg.Append(result);
for (; msg.Length < length; msg.Insert(, ""));
result = msg.ToString();
}
returnresult;
} ///<summary>
/// 将浮点数转ASCII格式十六进制字符串(符合IEEE-754标准(32))
/// </summary>
/// <paramname="data">浮点数值</param>
/// <returns>十六进制字符串</returns>
public static stringfloatToIntString(float data)
{
byte[]intBuffer = BitConverter.GetBytes(data);
StringBuilder stringBuffer = new StringBuilder();
for (int i =; i < intBuffer.Length; i++)
{
stringBuffer.Insert(, toHexString(intBuffer[i] & 0xff, ));
}
returnstringBuffer.ToString();
} ///<summary>
/// 将ASCII格式十六进制字符串转浮点数(符合IEEE-754标准(32))
/// </summary>
/// <paramname="data">十六进制字符串</param>
/// <returns>浮点数值</returns>
public static floatintStringToFloat(String data)
{
if(data.Length < || data.Length > )
{
//throw new NotEnoughDataInBufferException(data.length(), 8);
throw (new ApplicationException("缓存中的数据不完整。"));
}
else
{
byte[] intBuffer = new byte[];
// 将16进制串按字节逆序化(一个字节2个ASCII码)
for(int i=; i<; i++)
{
intBuffer[i] = Convert.ToByte(data.Substring(( - i) * , ),);
}
return BitConverter.ToSingle(intBuffer, );
}
}

因工作需要,把再串口通信中浮点数与字节流的数据转换函数放在这,转发的,谢谢原作者。

今天花了一天的时间搜罗资料,为了解决一个串口编程的进制转化问题。因为串口传送的浮点数据格式与IEEE-754标准(32)有关。此标准长度为32位,四个字节的浮点数据传送顺序为先低字节后高字节,作为8个ASCII码传送。格式:D31符号位(1位表正负),D30~D23价码(8位),D22~D0尾数(23位)。

希望能够研究此块的同行们提供些帮助,下面是C#的转化方法:
        /// <summary>
        /// 将二进制值转ASCII格式十六进制字符串
        /// </summary>
        /// <paramname="data">二进制值</param>
        /// <paramname="length">定长度的二进制</param>
        /// <returns>ASCII格式十六进制字符串</returns>
        public static string toHexString(intdata, int length)
        {
            stringresult = "";
            if (data> 0)
               result = Convert.ToString(data, 16).ToUpper();
            if(result.Length < length)
            {
               // 位数不够补0
               StringBuilder msg = new StringBuilder(0);
               msg.Length = 0;
               msg.Append(result);
               for (; msg.Length < length; msg.Insert(0, "0"));
               result = msg.ToString();
            }
            returnresult;
       }

///<summary>
        /// 将浮点数转ASCII格式十六进制字符串(符合IEEE-754标准(32))
        /// </summary>
        /// <paramname="data">浮点数值</param>
        /// <returns>十六进制字符串</returns>
        public static stringfloatToIntString(float data)
        {
            byte[]intBuffer = BitConverter.GetBytes(data);
           StringBuilder stringBuffer = new StringBuilder(0);
            for (int i =0; i < intBuffer.Length; i++)
            {
               stringBuffer.Insert(0, toHexString(intBuffer[i] & 0xff, 2));
            }
            returnstringBuffer.ToString();
        }

///<summary>
        /// 将ASCII格式十六进制字符串转浮点数(符合IEEE-754标准(32))
        /// </summary>
        /// <paramname="data">十六进制字符串</param>
        /// <returns>浮点数值</returns>
        public static floatintStringToFloat(String data)
        {
            if(data.Length < 8 || data.Length > 8)
            {
               //throw new NotEnoughDataInBufferException(data.length(), 8);
               throw (new ApplicationException("缓存中的数据不完整。"));
            }
            else
            {
               byte[] intBuffer = new byte[4];
               // 将16进制串按字节逆序化(一个字节2个ASCII码)
               for(int i=0; i<4; i++)
               {
                   intBuffer[i] = Convert.ToByte(data.Substring((3 - i) * 2, 2),16);   
               }
               return BitConverter.ToSingle(intBuffer, 0);
            }
        }

C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)的更多相关文章

  1. 打印一个浮点数组,会输出字符串"Hello, world“ & 浮点数的二进制表示(IEEE 754标准)

    #include <stdio.h> #include<stdlib.h> int main() { float a[3] = { 1143139122437582505939 ...

  2. 【算法】解析IEEE 754 标准

    目录结构: contents structure [-] 浮点数的存储过程 次正规数(Denormalized Number) 零(zero) 非数值(NaN) 无穷大(infinity) 除数为0. ...

  3. IEEE 754标准--维基百科

    IEEE二进制浮点数算术标准(IEEE 754) 是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denorm ...

  4. python 警惕 IEEE 754标准

    双精度浮点数格式,即IEEE 754标准 >>> 0.1+0.2 0.30000000000000004 >>> (0.1+0.2)==0.3 False > ...

  5. 基于 IEEE 754 标准的 单精度浮点数计算方式 (未完成)

    def dec2bin(dec): if dec < 0: s = ' dec = dec * (-1) else: s = ' e = 127 dec = float(dec) r = int ...

  6. 【转】浮点数与IEEE 754

    http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html 浮点数 1.   什么是浮点数 在计算机系统的发展过程中,曾经 ...

  7. IEEE 754标准

    IEEE 754-1985 was an industry standard for representing floating-point numbers in computers, officia ...

  8. IEEE二进制浮点数算术标准(IEEE 754)

    整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...

  9. IEEE 754二进制浮点数算术标准

    可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...

随机推荐

  1. 枚举Enum

    #region 根据枚举名称获取值或反之        /// <summary>        /// 根据枚举的名称,得到该枚中该名称对应的值        /// </summ ...

  2. Python学习【第七篇】基本数据类型

    基本数据类型 数字 2是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子,E标记表示10的幂.在这里,52.3E-4表示52.3*10-4. (-5+4j)和(2 ...

  3. 继续Django

    环境准备 1.    创建一个Django后,Django的目录: │ manage.py │ ├─Django_s1 │ settings.py │ urls.py │ wsgi.py │ __in ...

  4. html标签分两种:块状元素和内联元素

      块状元素一般是其它元素的容器,可以容纳内联元素和其它块状元素,独占一行,宽度和高度起作用.如div,p等标签属于块状元素.     内联元素只能容纳文本和其它内联元素,可与其它内联元素位于同一行, ...

  5. CentOS6配置国内yum源

    在安装完CentOS后为了加快安装.更新rpm包的速度.需要将yum源改为国内源,国内比较快的源有中科大.163.sohu源.下面修改为163源为例子: 首先进入源的配置目录:执行 cd /etc/y ...

  6. .net之工作流工程展示及代码分享(一)工作流表单

    Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符 ...

  7. C# 不重复的随机数

    public int RabdomNumber() { num = new Random(Guid.NewGuid().GetHashCode()).Next(0, 40); return num; ...

  8. EF 数据初始化

    数据库不存在时重新创建数据库: Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testConte ...

  9. 并发框架Disruptor浅析

    1.引言 Disruptor是一个开源的Java框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟.D ...

  10. app开发方式大汇总

    1.原生方式.android平台使用java方式.IOS平台使用object-c或者swift方式.优点:可以将app的性能做到极致.缺点:开发效率低.维护成本高. 2.纯前端方式.比如用jquery ...