C# IEEE754浮点数的转换方法

ref: https://blog.csdn.net/jvouge/article/details/5894174


16进制转换为10进制的公式如下: 

SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127)

1。字节转换为浮点数

int data1=0x41;
            int data2=0x45;
            int data3=0x70;
            int data4=0xA4;
            
            int data = data1 << 24 | data2 << 16 | data3 << 8 | data4;

            int nSign;
            if ((data & 0x80000000) > 0)
            {
                nSign = -1;
            }
            else
            {
                nSign = 1;
            }
            int nExp = data & (0x7F800000);
            nExp = nExp >> 23;
            float  nMantissa = data & (0x7FFFFF);

    if(nMantissa !=0)
            nMantissa = 1+nMantissa / 8388608;

            float  value = nSign * nMantissa * (2<<(nExp - 128));

2。浮点转换为字节

  float data = 12.34f;

            ///int data2 =300;

            //MessageBox.Show("EEPROM Data: " + Convert.ToString(data2, 16));
            int nValue = 0;

        
            int nSign;
            if (data >= 0)
            {
                nSign = 0x00;

            }
            else
            {
                nSign = 0x01;

       data =data*(-1);
            }
             int nHead=(int)data;
             float fTail = data % 1;
             String str = Convert.ToString(nHead, 2);
             int nHead_Length=str.Length;

             nValue = nHead;

             int nShift = nHead_Length;
             while(nShift<24)   // (nHead_Length + nShift < 23)
             {
                 if ((fTail * 2) >= 1)
                 {
                     nValue = (nValue << 1) | 0x00000001;
                 }
                 else
                 {
                     nValue = (nValue << 1);
                 }
                 fTail=(fTail*2)%1;
                 nShift++;
             }

             int nExp = nHead_Length - 1 + 127;
             nExp=nExp<<23;
             nValue = nValue & 0x7FFFFF;
             nValue = nValue | nExp; 
             nSign=nSign<<31;
             nValue=nValue|nSign;

             int data1, data2, data3, data4;
             data1 =  nValue & 0x000000FF;
             data2 = (nValue & 0x0000FF00)>>8;
             data3 = (nValue & 0x00FF0000)>>16;
             data4 = (nValue>>24) & 0x000000FF;

      if (data == 0)
             {
                 data1 = 0x00;
                 data2 = 0x00;
                 data3 = 0x00;
                 data4 = 0x00;                
             }

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值