在做上位机开发过程中,经常会碰到字节数组与浮点数,整数等数据之间的转换,有时为了验证数据是否解析正确,得借助于IEEE浮点数工具,本文把基于c#实现的浮点数与字节数组(或16进制的字符串)转换的实现方法分享如下:

       /// <summary>
/// 将二进制值转ASCII格式十六进制字符串
/// </summary>
/// <paramname="data">二进制值</param>
/// <paramname="length">定长度的二进制</param>
/// <returns>ASCII格式十六进制字符串</returns>
public static string toHexString(int data, int length)
{
string result = "";
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();
}
return result;
}
///<summary>
/// 将浮点数转ASCII格式十六进制字符串(符合IEEE-754标准(32))
/// </summary>
/// <paramname="data">浮点数值</param>
/// <returns>十六进制字符串</returns>
public static string FloatToIntString(float data)
{
byte[] intBuffer = BitConverter.GetBytes(data);
StringBuilder stringBuffer = new StringBuilder();
for (int i = ; i < intBuffer.Length; i++)
{
stringBuffer.Insert(, toHexString(intBuffer[i] & 0xff, ));
}
return stringBuffer.ToString();
} /// <summary>
/// 将ASCII格式十六进制字符串转浮点数(符合IEEE-754标准(32))
/// </summary>
/// <param name="data">16进制字符串</param>
/// <returns></returns>
public static float StringToFloat(String data)
{
if (data.Length < || data.Length > )
{
//throw new NotEnoughDataInBufferException(data.length(), 8);
return ;
}
else
{
byte[] intBuffer = new byte[];
// 将16进制串按字节逆序化(一个字节2个ASCII码)
for (int i = ; i < ; i++)
{
intBuffer[i] = Convert.ToByte(data.Substring(( - i) * , ), );
}
return BitConverter.ToSingle(intBuffer, );
}
}
/// <summary>
/// 将byte数组转为浮点数
/// </summary>
/// <param name="bResponse">byte数组</param>
/// <returns></returns>
public static float ByteToFloat(byte[] bResponse)
{
if (bResponse.Length < || bResponse.Length > )
{
//throw new NotEnoughDataInBufferException(data.length(), 8);
return ;
}
else
{
byte[] intBuffer = new byte[];
//将byte数组的前后两个字节的高低位换过来
intBuffer[] = bResponse[];
intBuffer[] = bResponse[];
intBuffer[] = bResponse[];
intBuffer[] = bResponse[];
return BitConverter.ToSingle(intBuffer, );
}
}
/// <summary>
/// 用指针方式强制将byte数组转为浮点数
/// </summary>
/// <param name="bResponse"></param>
/// <returns></returns>
public static float BytetoFloatByPoint(byte[] bResponse)
{
//uint nRest = ((uint)response[startByte]) * 256 + ((uint)response[startByte + 1]) + 65536 * ((uint)response[startByte + 2]) * 256 + ((uint)response[startByte + 3]);
float fValue = 0f;
uint nRest = ((uint)bResponse[]) *
+ ((uint)bResponse[]) +
* (((uint)bResponse[]) * + ((uint)bResponse[]));
//用指针将整形强制转换成float
unsafe
{
float* ptemp;
ptemp = (float*)(&nRest);
fValue = *ptemp;
}
return fValue;
}

注意:有时从串口(或其它设备读到的字节有高低位之分,在作为参数传递前把他们的顺序调整过来即可)

(IEEE-754) 字节数组与浮点数之间的互相转换(MODBUS float类型)的更多相关文章

  1. C#中字符数组,字节数组和string之间的转化

    转自:http://blog.csdn.net/wangxiaoqin00007/article/details/17675419 NDC(NetworkDiskClient)的界面和后台程序之间用S ...

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

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

  3. Java中二进制、十进制、十六进制及ASCII码与String及字节数组与十六进制之间的转换

    public class DigitalTrans { /** * 数字字符串转ASCII码字符串 * * @param String * 字符串 * @return ASCII字符串 */ publ ...

  4. 字符串、字节数组、流之间的相互转换以及文件MD5的计算

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace myMe ...

  5. PHP数组和Json之间的互相转换 json_encode() 和 json_decode()

    之所以要用到Json,很多时候是因为使用ajax对象时,程序与JS函数之间的数据交互.因为JS不认识PHP中的数组,PHP也不认识JS中的数组或对象.Json很好的解决了这个问题. Json简介 JS ...

  6. PHP处理数组和XML之间的互相转换

    PHP将数组转换成XML PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如: function arrayToXml($ ...

  7. PHP数组与对象之间用递归转换

    2 3 4 5 6 7 8  function object_to_array($e) {      $_arr = is_object($e) ? get_object_vars($e) : $e; ...

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

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

  9. 字节数组byte[]和整型,浮点型数据的转换——Java代码

    近期在写C++ socket和java socket之间的通信程序,涉及到整数浮点数的传输.须要从字节数组还原数据,查了一些资料.总结例如以下 1.       整数和浮点数的机器表示 在机器内部.不 ...

随机推荐

  1. charles抓包工具分享

    今天,给大组内QA做了一次分享,主要面向移动端测试,介绍了我平时在测试工作中用到的功能,大家都积极响应,现场搭环境,现场操作,现场提问解答,最后大家都成功的利用起来了,感觉很有成就感.下面介绍我今天分 ...

  2. fuck--Fix git command line spelling errors GitHub

    修复Git输入错误,挺有意思.git命令关键字如果输入错误,会提示最接近的正确关键字,如果提示内容是你想要的,输入'fuck',就能执行了. GitHub源码.源码生成exe,windows上运行. ...

  3. Hadoop2.x的Eclipse插件编译与安装

    Eclipse的Hadoop插件在开发hadoop应用程序中可以提供一些很方便的操作,可以直接Eclipse中浏览HDFS上的文件,可以直接新建选择MapReduce项目,项目自动包含所有需要的had ...

  4. UIBUTTON titlelabel.text 不显示

    button.titlelabel.text=@"查询";设置后运行发现没事正确显示. 查找后原来UIButton分状态的,textLabel不管用 [button setTitl ...

  5. js实现文件上传

    js function UpladFile() { var fileObj = document.getElementById("filetes").files[0]; // 获取 ...

  6. struts2 jquery ajaxFileUpload 异步上传文件

    网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...

  7. 最新IP地址数据库Dat格式-高性能高并发版(2017年1月)

    最新IP地址数据库->Dat格式 高性能格式->qqzeng-ip.dat 国内版-20170101-Dat 版                国外版-20170101-Dat 版     ...

  8. CSS中隐藏内容的3种方法及属性值

    CSS中隐藏内容的3种方法及属性值 (2011-02-11 13:33:59)   在制作网页时,隐藏内容也是一种比较常用的手法,它的作用一般有:隐藏文本/图片.隐藏链接.隐藏超出范围的内容.隐藏弹出 ...

  9. table 边框

    <table width="100%" border="0" cellpadding="2" cellspacing="0& ...

  10. CopyFile类通过调用这个类的delete(String filePath)方法可以组合成一个Cut类

    package folderoperation; import java.io.File;/** * 注意它会删除文件,文件夹以及文件夹下的所有内容(根据指定的地址) * @author Dawn * ...