C# IEEE754转换为浮点数

该代码实现了一个函数,将符合IEEE754标准的32位浮点数十六进制表示转换为十进制。主要步骤包括:解析十六进制字符串,处理符号位、移位和尾码,计算指数和小数部分,并进行相应的位移和转换操作。最后,根据正负号生成最终的十进制结果。
摘要由CSDN通过智能技术生成
  1. IEEE754浮点数转换参考网站
    在这里插入图片描述

  2. 代码参考

        string IEEE754_32_single_to_decimal(string hexString)
        {
            string retrunVal = string.Empty;
            if (hexString != "")
            {
                string mValue = HexString2BinString(hexString).Replace(" ", "");
                // 符号位
                //var symbolFlag = (mValue.Substring(0, 1) == "1") ? "负数" : "正数";
                // 移位
                var shiftFlag = mValue.Substring(1, 8);
                //尾码
                var tailCode = mValue.Substring(9);
                //获取移位整数部分
                var shiftIntegerPart = (Convert.ToInt32(shiftFlag, 2) - 127).ToString();
                //转成十进制
                int t = Convert.ToInt32(shiftFlag, 2);
                t = t - 127;
                shiftIntegerPart = t.ToString();
                //二进制数值
                //正数部分
                var positivePart = (Convert.ToInt32("1" + tailCode, 2) >> (tailCode.Length - t)).ToString();
                //小数点部分
                string Float = tailCode;
                if (t > 0)
                { Float = tailCode.Substring(t); }
                else if (t < 0)
                {
                    Float = "1" + tailCode;
                    for (int i = t + 1; i < 0; i++)
                    {
                        Float = "0" + Float;
                    }
                }
                Double tFloat = 0;
                //C# 指数 函数 double a=2;double b=Math.Pow (a,3);
                char[] aa = Float.ToCharArray();
                for (int i = 0; i < aa.Length; i++)
                {
                    if (aa[i] == '1')
                    {
                        tFloat = tFloat + Math.Pow(2, (-(i + 1)));
                    }
                }

                var fractionalPart = tFloat.ToString();

                if (mValue.Substring(0, 1) == "0")
                { textBox10.Text = positivePart + "." + fractionalPart.Substring(2); }
                else
                {
                    textBox10.Text = "-" + positivePart + "." + fractionalPart.Substring(2);
                }
            }
            return retrunVal;
        }

        /// <summary>
        /// //16转2方法
        /// </summary>
        /// <param name="hexString"></param>
        /// <returns></returns>
        static string HexString2BinString(string hexString)
        {
            try
            {
                string result = string.Empty;
                foreach (char c in hexString)
                {
                    int v = Convert.ToInt32(c.ToString(), 16);
                    int v2 = int.Parse(Convert.ToString(v, 2));
                    // 去掉格式串中的空格,即可去掉每个4位二进制数之间的空格,
                    result += string.Format("{0:d4} ", v2);
                }
                return result;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值