Fortran Coder

查看: 14904|回复: 5
打印 上一主题 下一主题

[讨论] Fortran实现进制转换

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2014-5-3 18:25:26 | 显示全部楼层
楼主很好学,乐于动脑筋,赞一个。

有两个问题与楼主分享。

1. Fortran 有一个 Z 编辑符,可以很方便的进行十六进制与十进制的转换。(八进制和二进制也有类似的)(可参考下面我修改的代码,第11,12两行)
2. 我不建议直接在代码里写ASCII的值,48,57,97,65 这些数字,反正我是记不住。阅读这样的代码还需要翻看ASCII表。(如果按照我的代码来写,是不是更直观易读呢?)

最后祝福楼主五一快乐
[Fortran] 纯文本查看 复制代码
!=============Main Program==============
program main 
  implicit none
  character(8) :: hex1 !分配字符长度,不然到后面只识别一个字符
  integer :: dec_number
  integer,external :: hex_to_dec
  write(*,*)'Please type a Hex number:'
  read(*,*)hex1
  dec_number=hex_to_dec(hex1)  
  write(*,"('The input HEX is:',a10,'The output DEC is :',i10)")hex1,dec_number
  read( hex1 , '(Z8)' ) dec_number
  write(*,"('The input HEX is:',a10,'The output DEC is :',i10)")hex1,dec_number
  stop
end program main
!=============Sub  Program==============
integer function hex_to_dec(x)
  character(8) :: x
  integer :: sum,Length,i , m
  character :: hex
  length=len_trim(x)
  if(mod(length,2) /= 0)write(*,*)'Please type a correct Hex number:'
  sum = 0
  do i=1,length !从字符转化为十进制数值(0-16)
    hex = x(i:i)
    Select Case( hex )
    Case ( '0':'9'  )
      m= ichar(hex) - ichar('0')
    Case( 'A':'F' )
      m=ichar(hex) - ichar('A') + 10
    Case( 'a':'f' )
      m=ichar(hex) - ichar('a') + 10
    End Select
    sum = sum + m*16**(4-i) !将Hex转换为Dec
  end do  
  hex_to_dec=sum
end function  hex_to_dec
!=============End  of Program=============

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-4 23:44

Powered by Tencent X3.4

© 2013-2024 Tencent

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