IEEE754换算方法

 

VB IEEE754换算方法

 

 

Private   Function   Str2Float(str   As   String)   As   Double  
          Dim   k   As   Integer  
          Dim   i   As   Integer  
          Dim   j   As   Integer  
          Dim   s   As   Integer  
          Dim   SS   As   Integer  
          Dim   E   As   Integer  
          Dim   M   As   Long      
          Dim   d   As   Double  
          Dim   n   As   Integer  
          Dim   h   As   Integer  
          Dim   l   As   Integer  
          Dim   s2()   As   String,   st   As   String  
          s2   =   Split(str,   "   ")  
          If   UBound(s2)   <>   3   Then  
                  MsgBox   "
数据格式错误,无法转换!
"  
                  Str2Float   =   0  
                  Exit   Function  
          End   If  
          For   i   =   0   To   UBound(s2)  
                  If   Len(s2(i))   =   1   Then   s2(i)   =   "0"   &   s2(i)  
                  st   =   st   &   s2(i)  
          Next   i  
          Dim   buff(7)   As   Byte  
          For   i   =   0   To   7  
                  buff(i)   =   Asc(Mid(st,   i   +   1,   1))  
          Next   i  
          Dim   a(15)   As   Byte  
                  For   i   =   0   To   15  
                  a(i)   =   i  
          Next   i  
          Dim   b(7)   As   Byte  
          For   j   =   0   To   7  
                  If   buff(j)   >=   48   And   buff(j)   <=   57   Then  
                          k   =   buff(j)   -   48  
                          b(j)   =   a(k)  
                  ElseIf   buff(j)   >=   65   And   buff(j)   <=   70   Then  
                          k   =   buff(j)   -   65  
                          b(j)   =   a(k   +   10)  
                  Else  
                          Exit   Function  
                  End   If  
          Next   j  
          Dim   c(3)   As   Long  
          For   n   =   0   To   6   Step   2  
                  c(n   /   2)   =   ((b(n)   And   &H7F)   *   (2   ^   4))   Or   (b(n   +   1)   And   &H7F)  
          Next   n  
          s   =   c(0)   /   2   ^   7  
          If   s   =   1   Then  
                  SS   =   -1  
          Else  
                  SS   =   1  
          End   If  
          E   =   ((c(0)   And   &H7F)   *   2)   Or   ((c(1)   And   &H80)   /   2   ^ 7)     
          M   =   ((c(1)   And   &HFFFFFF)   *   2   ^   16   And   &H7FFFFF)   Or   ((c(2)   And   &HFFFFFF)   *   2   ^   8)   Or   ((c(3)   And   &HFFFFFF))  
          d   =   SS   *   2   ^   (E   -   127)   *   (M   /   (2   ^   23)   +   1)  
          Str2Float   =   d  
  End   Function  
  Private   Sub   Command1_Click()  
          Debug.Print   Str2Float("A   D7   A3   3C")  
  End   Sub  

 

 

C#  IEEE754 换算方法

           string strbase16 = strhex;

            string strtemp = "";

            double temp = 0;

            int m_s = 0; //   数符 

            int m_e = 0; //    

            double m_x = 0; //   小数部分 

            double m_re = 0; //   计算结果 

 

            strtemp = strbase16.Substring(0, 2);

            temp = Convert.ToInt32(strtemp, 16) & 0x80;

            if (temp == 128) m_s = 1;

 

            strtemp = strbase16.Substring(0, 3);

            temp = Convert.ToInt32(strtemp, 16) & 0x7f8;

            m_e = Convert.ToInt32(temp / Math.Pow(2, 3));

 

            strtemp = strbase16.Substring(2, 6);

            temp = Convert.ToInt32(strtemp, 16) & 0x7fffff;

            m_x = temp / Math.Pow(2, 23);

 

            m_re = Math.Pow(-1, m_s) * (1 + m_x) * Math.Pow(2, m_e - 127);

 

            return decimal.Round(Convert.ToDecimal(m_re), 5).ToString(); 

        }

     }

   

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值