C#中单精度浮点数和byte[]之间的转换

        最近在写modbus的通讯编程。需要通过485去读取电能表中的数据获得到的数据位四位的byte[]型,但是我需要转换成单精度浮点型。编程的时候总出错了。网上找了很多,花了2天的时间也没有搞定。有很多的方法,写了很多的小demo。其实最后发现很简单。

需求:四位的byte[] data转换成对应的float.

收到数据为9位16进制的数据:02 04 04 3D 23 D7 0A EB 15 ,根据modbus协议第一位02是站位地址,第二位04是功能码,第三位04是数据位数,说明接下来的4位是数据3D 23 D7 0A。最后的EB 15是CRC校验码.

新定义byte[]=3D 23 D7 0A;

如果直接把3D 23 D7 0A转换为float型会出错。 
float energyTemp = System.BitConverter.ToSingle(data); 

因为在C#中。float转换为byte[]之后的数据是顺序是反着来的。就是高位在左面,低位在右边。所以需要对byte[]先进行转换。换成byte[]= 0A D7 23 3D。然后再用BitConverter就对了。实现语句如下:

byte[] NetRd = {0x02, 0x04, 0x01, 0x00, 0x00, 0x02, 0x70, 0x04 } 
 
byte[] buffer = new byte[1024 * 1024 * 2]; 
int aa = connection.Receive(buffer);

byte[] data = new byte[4];
for (int i = 0; i < 4; i++)
{
    data[3 - i] = buffer[i + 3];
}
float energyTemp = System.BitConverter.ToSingle(data);
double tempEnergy = (double)energyTemp;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值