24小时热门版块排行榜    

查看: 743  |  回复: 1

yhwsmile

金虫 (小有名气)

[交流] 【求助】求助:帮忙看下这个程序是怎么转二进制的咯,谢谢啊 已有1人参与

麻烦各位帮忙看看,这是一个对数据进行简单加密后,对数据进行二进制转换,子程序write_hd就是转二进制,子程序xzen_ja是数据加密~~~~

fortran不能面向对象,我现在想把这个程序转成VB,现在我看不懂这个程序是怎么转二进制的,麻烦各位虫友帮忙看看~~~

图片1为station.txt
图片2为数据格式
CODE:
program data_conv
      integer ns
      integer,allocatable :: sta(:)
      character t_r*3,cst*5
      integer(kind=2) tm(367)
      integer ln,ld,i_dim,ieof
      character datdir*50,outdir*50,hisdir*50,logdir*50   !!!!资料目录,输出结果目录,阈值文件存储目录

          !!!!!!!读取目录文件
          open(10,file='config.txt',err=2050)
          read(10,'(12x,i4)',err=2050)ns
          read(10,'(12x,a50)',err=2050)datdir  !二进制文件的存储路径
          read(10,'(12x,a50)',err=2050)outdir
          read(10,'(12x,a50)',err=2050)hisdir
          read(10,'(12x,a50)',err=2050)logdir
          close(10)
          goto 90
2050  print*,'input the direct access is err, the run will stop'
      stop 9999

90    continue

    allocate(sta(ns))
      t_r='ctm'
open(110,file='station.txt')  !读文件名,只有站号。
do i=1,ns
read(110,*)sta(i)
enddo
close(110)
do ln=1,ns
       write(cst,'(i5)')sta(ln)
       tm=32766
       open(20,file='e:\extr\原始资料\hisctm\'//t_r//cst//'.dat',err=999)  !指示文本文件的路径
98     read(20,*,end=999)nsta,nya
       read(20,'(30i6)',end=999)(tm(ld),ld=1,366)
       ly=nya-1950
       ieof=6915
       call write_hd(t_r,sta(ln),ly,i_dim,tm,ieof,datdir)
       goto 98   
999   continue               
      close(20)
      enddo  !!!for do ln=1,ns  
      deallocate(sta)   
      
end program data_conv

subroutine write_hd(t_r,ist,irecs,i_dim,b0,ieof,wysm)
       parameter(nn=7)   !!!!定义需要处理的变量数
       integer(kind=2) b0(i_dim)
       integer ieof,ist,irecs
       character t_r*3,stat*5,ysm(nn)*3,ysf(nn)*7,wysm*50
       data ysm/'crd','crr','ctm','ctn','ctd','crs','cci'/
       data ysf/'hiscrd\','hiscrr\','hisctm\','hisctn\','hisctd\','hiscrs/','hiscci\'/
           integer len1
!!!!!!!crd08-08时降水量,crr20-20时降水量,ctm20-20时最高气温,ctn20-20时最低气温,ctd20-20时平均气温
      
    if(ieof/=6915)then
       ieof=-99
       print*,'您无权进行此操作,请联系管理员'
       return
       endif
      
       if(i_dim/=367)then
       ieof=-10
       print*,'资料数组长度错误,i_dim=   ',i_dim
       return
       endif
      
       if(i_dim==367)then
!!!!!!!判断当前需要写入的变量        
        do k=1,nn
        if(t_r==ysm(k))kk=k
        enddo
        
        do i=1,i_dim-1
        ix0=b0(i)
!!!!!!!对当前写入数据做简单的变换        
     if(t_r(1:2)=='cr') call xzen_ja(ist,i+5,ix0)
        if(t_r(1:2)=='ct') call xzen_ja(ist,i+10,ix0)
        b0(i)=ix0
        enddo
        b0(i_dim)=irecs+1950   !!!!!!数组最后一个值赋为年
        
!!!!!!!写数据文件
        write(stat,'(i5)')ist
        close(8)
                len1=len_trim(wysm)
        open(8,file=wysm(1:len1)//ysf(kk)//ysf(kk)//stat//'.dat',access='direct',recl=2*i_dim,err=99)

        write(8,rec=irecs,err=999)b0

        close(8)
        ieof=1
        return
        
       endif
      
99     ieof=0
       print*,'打开文件错误',wysm(1:len1),ysf(kk),ysm(kk),stat,'.dat'
       close(8)
       return
999    ieof=-2
       print*,'写入文件错误',wysm(1:len1),ysf(kk),ysm(kk),stat,'.dat'
       close(8)
       return
      
end subroutine write_hd

!!!!对输入的数值ix0做简单转换
subroutine xzen_ja(ist,i,ix0)
      integer ist,i,ix0
      integer maxx,mins
      
      maxx=30000
      mins=-9990
      is3=mod(ist,3)
      it3=mod(i,3)
      it5=mod(i,5)
      it7=mod(i,7)
      it11=mod(i,11)
      it13=mod(i,13)
      it17=mod(i,17)
      
      if(ix0mins)then
      if(is3==0)then
       if(it3==0)ix0=ix0+it5+it17+it13
       if(it3==1)ix0=ix0+it7+it17+it11
       if(it3==2)ix0=ix0+it5+it11+it13
      else
       if(it3==0)ix0=ix0+it7+it11+it13
       if(it3==1)ix0=ix0+it3+it13+it11
       if(it3==2)ix0=ix0+it5+it11+it17
      endif
      else
       ix0=ix0
      endif
      
      return
end subroutine xzen_ja




[ Last edited by nono2009 on 2010-11-11 at 07:26 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zyj8119

木虫 (著名写手)

引用回帖:
Originally posted by yhwsmile at 2010-09-29 09:40:37:
麻烦各位帮忙看看,这是一个对数据进行简单加密后,对数据进行二进制转换,子程序write_hd就是转二进制,子程序xzen_ja是数据加密~~~~

fortran不能面向对象,我现在想把这个程序转成VB,现在我看不懂这个程序是 ...

逐项相除法求余???
好好学习,天天向上。
2楼2010-11-09 19:49:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 yhwsmile 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金啊基金 +3 longfie172 2026-08-20 3/150 2026-08-21 00:04 by wuchongjun
[基金申请] 科研孤儿太难了 +14 我4大白菜 2026-08-20 15/750 2026-08-20 22:33 by 袁向阳007
[基金申请] 让我中一个面上吧! +8 大萍1987 2026-08-20 10/500 2026-08-20 21:48 by 大萍1987
[基金申请] 言之凿凿,明天官网会通知放榜? +15 医学老男孩 2026-08-20 17/850 2026-08-20 20:35 by CaoLG
[基金申请] 时间戳又变了 +12 wuchongjun 2026-08-20 17/850 2026-08-20 20:05 by spzhao
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 只有每年这种时候来逛逛小木虫 +21 yaoyewhu2008 2026-08-20 22/1100 2026-08-20 17:03 by yaoyewhu2008
[基金申请] 放榜前的不淡定 40+3 snowwithsea 2026-08-19 12/600 2026-08-20 15:56 by lfy8008
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +5 瞬息宇宙 2026-08-15 5/250 2026-08-19 20:23 by super2002521
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 什么时候开奖? +6 CrisMessi 2026-08-18 6/300 2026-08-19 08:06 by Equinoxhua
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
信息提示
请填处理意见