楼主很好学,乐于动脑筋,赞一个。
有两个问题与楼主分享。
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=============
|