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

 找回密码
 欢迎注册
查看: 5522|回复: 20

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

[复制链接]
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

    发表于 2012-9-18 09:45:05 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    本帖最后由 dorothyorsusie 于 2012-9-26 14:48 编辑

    最近想把segy中的ibm浮点数转换成float浮点,很多高手已经做过这个了吧,求指点

    点评

    问题已解决了  发表于 2012-9-27 13:20

    评分

    参与人数 1阳光币 +5 贡献 +2 收起 理由
    卢和萍 + 5 + 2 欢迎楼主多来交流,讨论

    查看全部评分

  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-18 20:22:36 | 显示全部楼层
    我也想做
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-19 09:05:18 | 显示全部楼层
    Franklin 发表于 2012-9-18 20:22
    我也想做

    把低位的字节和高位的调换,然后转换成float
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-19 21:44:29 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-19 09:05
    把低位的字节和高位的调换,然后转换成float

    我从su里边找了个ibm_to_float解决了
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-19 22:14:48 | 显示全部楼层
    Franklin 发表于 2012-9-19 21:44
    我从su里边找了个ibm_to_float解决了

    su是什么?请讲中文,朋友
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-21 19:25:07 | 显示全部楼层
    su是cwp(克罗拉多矿院)的一款开源软件
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-21 19:25:26 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-19 22:14
    su是什么?请讲中文,朋友


    su是cwp(克罗拉多矿院)的一款开源软件
  • TA的每日心情
    开心
    2015-3-11 15:26
  • 签到天数: 307 天

    [LV.8]以坛为家I

     楼主| 发表于 2012-9-24 10:34:41 | 显示全部楼层
    Franklin 发表于 2012-9-21 19:25
    su是cwp(克罗拉多矿院)的一款开源软件

    能不能贴出来看看,怎么写的
  • TA的每日心情
    奋斗
    2021-9-6 20:56
  • 签到天数: 327 天

    [LV.8]以坛为家I

    发表于 2012-9-24 16:34:08 | 显示全部楼层
    dorothyorsusie 发表于 2012-9-24 10:34
    能不能贴出来看看,怎么写的

    static void ibm_to_float(int from[], int to[], int n, int endian)
    /***********************************************************************
    ibm_to_float - convert between 32 bit IBM and IEEE floating numbers
    ************************************************************************
    Input::
    from                input vector
    to                output vector, can be same as input vector
    endian                byte order =0 little endian (DEC, PC's)
                                =1 other systems
    *************************************************************************
    Notes:
    Up to 3 bits lost on IEEE -> IBM

    Assumes sizeof(int) == 4

    IBM -> IEEE may overflow or underflow, taken care of by
    substituting large number or zero

    Only integer shifting and masking are used.
    *************************************************************************
    Credits: CWP: Brian Sumner,  c.1985
    *************************************************************************/
    {
        register int fconv, fmant, i, t;

        for (i = 0;i < n; ++i) {

            fconv = from;

            /* if little endian, i.e. endian=0 do this */
            if (endian == 0) fconv = (fconv << 24) | ((fconv >> 24) & 0xff) |
                    ((fconv & 0xff00) << 8) | ((fconv & 0xff0000) >> 8);

            if (fconv) {
                fmant = 0x00ffffff & fconv;
                /* The next two lines were added by Toralf Foerster */
                /* to trap non-IBM format data i.e. conv=0 data  */
                if (fmant == 0)
                    warn("mantissa is zero data may not be in IBM FLOAT Format !");
                t = (int) ((0x7f000000 & fconv) >> 22) - 130;
                while (!(fmant & 0x00800000)) { --t; fmant <<= 1; }
                if (t > 254) fconv = (0x80000000 & fconv) | 0x7f7fffff;
                else if (t <= 0) fconv = 0;
                else fconv =   (0x80000000 & fconv) | (t << 23)
                             | (0x007fffff & fmant);
            }
            to = fconv;
        }
        return;
    }

    评分

    参与人数 1阳光币 +5 贡献 +2 收起 理由
    卢和萍 + 5 + 2 谢谢您的参与

    查看全部评分

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

    [LV.8]以坛为家I

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

    谢谢了
    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

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

    GMT+8, 2024-5-10 07:41 , Processed in 0.084014 second(s), 29 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

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