C#接收4位16进制数据,转换为IEEE754的浮点数

 最近在处理下位机给上位机发送数据,采用的485通讯协议,解析下位机发送的数据,然后遇到问题即:下位机是采用C语言,一次性只能发送8位的16进制,浮点数是32位,只能分四次发送,然后接收到4个16进制数据,我是先将这四个数据用移位的方法得到一个String数据,然后再传进下面这个方法,得到浮点数。

代码根据 https://blog.csdn.net/weixin_42985452/article/details/121503593编写

将以下32位二进制输入,可以得到正确答案

        /// <summary>
        /// IEEE754转换为浮点数
        /// </summary>
        根据 https://blog.csdn.net/weixin_42985452/article/details/121503593编写
        /// <param name="willBuild">需要转换的二进制数组</param>
        /// <returns></returns>
        public static float[] StringToFloat(string[] willBuild)
        {
            float[] floatValue = new float[willBuild.Length];
            int j = 0;
            foreach (var item in willBuild)
            {
                float Value, sum = 0;
                int sign = Convert.ToInt16(item.Substring(0, 1).ToString());
                //截取31位到24位
                string E_exponent = item.Substring(1, 8).ToString();
                //将二进制 E_exp字符串 转换为十进制
                int E = Convert.ToInt32(E_exponent, 2);
                //截取23位到1位
                string E_fraction = item.Substring(9, 23).ToString();
                //例子:01000000000000000000000
                for (int i = 1; i <= 23; i++)
                {
                    if (Convert.ToInt16(E_fraction.Substring(i - 1, 1).ToString()) == 1)
                    //如果截取的E_fraction内等于1则进行运算
                    {
                        sum += (float)Math.Pow(2, -i);
                    }
                }
                Value = (float)Math.Pow((-1), sign) * (float)Math.Pow((2), (E - 127)) * (1 + sum);
                floatValue[j++] = Value;
            }
            return floatValue;
        }

 如有错误或者不妥,请指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值