阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
楼主: dorothyorsusie

怎么将ibm浮点数转换成float浮点,请高手指点,最好用c#

[复制链接]
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-24 17:01:31 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-24 16:59
    谢谢了

    呵呵 ,
    相互学习啊
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-24 17:51:10 | 显示全部楼层
    分享一个我用c#写的ibm2float:
            public double IBMToFloat(byte[] buf, int size)
        {
            //低位在前,高位在后,交换字节顺序得到正确的数
            //如果4字节,Step1:读取一个32位的数据;Step2:互换该数据的第一个字节和第四个字节,
            //互换该数据的第二个字节和第三个字节。这时得到的数据才是确切的数据。
                 byte temp;

                 double value,y=0;

               switch(size)
               {
                   case 2:
                        temp = buf[0]; buf[0] = buf[1]; buf[1] = temp;
                   
                               Int16 x =BitConverter.ToInt16(buf,0);

                        y = (double)x;
                          break;
                   
                   case 4:
                  
                        temp = buf[0]; buf[0] = buf[3]; buf[3] = temp;
                        temp = buf[1]; buf[1] = buf[2]; buf[2] = temp;
                        float m = BitConverter.ToSingle(buf,0);
                        y = (double)m;
                         break;
                   case 8:
                      
             
                        temp = buf[0]; buf[0] = buf[7]; buf[7] = temp;
                        temp = buf[1]; buf[1] = buf[6]; buf[6] = temp;
                        temp = buf[2]; buf[2] = buf[5]; buf[5] = temp;
                        temp = buf[3]; buf[3] = buf[4]; buf[4] = temp;

                        y = BitConverter.ToDouble(buf,0);
                           break;
                   default:
                           break;

                      
               }

               value = y;
            
               return value;
       
        }
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-26 09:19:38 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-24 17:51
    分享一个我用c#写的ibm2float:
            public double IBMToFloat(byte[] buf, int size)
        {

    只交换字节恐怕不行
    推荐一篇文章
    32位IEEE和IBM浮点数结构及其转换方法.pdf (819.58 KB, 下载次数: 27)

  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-26 09:42:49 | 显示全部楼层
    Franklin 发表于 2012-9-26 09:19
    只交换字节恐怕不行
    推荐一篇文章

    我正在想这个问题,你的资料给的太及时了,非常非常感谢
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-26 11:23:27 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-26 09:42
    我正在想这个问题,你的资料给的太及时了,非常非常感谢

    用c#时不用考虑这个问题,只是4个字节的时候应该改成ulong=Bitconvert.ToUInt32(buf,0);c#真心给力啊,转换无压力
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-27 09:42:48 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-26 11:23
    用c#时不用考虑这个问题,只是4个字节的时候应该改成ulong=Bitconvert.ToUInt32(buf,0);c#真心给力啊,转 ...

    o,
    原来C#如此强大,
    我还停留在C语言上面
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-27 10:05:33 | 显示全部楼层
    Franklin 发表于 2012-9-27 09:42
    o,
    原来C#如此强大,
    我还停留在C语言上面

    BitConverter很强大的,完全解决了
  • TA的每日心情
    无聊
    昨天 11:43
  • 签到天数: 3637 天

    [LV.Master]伴坛终老

    发表于 2012-9-28 10:37:41 | 显示全部楼层
    sharp很流行啊
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-30 08:50:19 | 显示全部楼层
    coverme 发表于 2012-9-28 10:37
    sharp很流行啊

  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2013-5-24 16:41:05 | 显示全部楼层
    Franklin 发表于 2012-9-24 16:34
    static void ibm_to_float(int from[], int to[], int n, int endian)
    /****************************** ...

    有没有IEEE转IBM的代码呢?亲~
    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2024-5-10 04:15 , Processed in 0.062184 second(s), 16 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表