hi,欢迎访问本站!
当前位置: 首页学习笔记正文

计算机编程ebcdic码,EBCDIC 与 ASCII 编码相互转换

用户投稿 学习笔记 161阅读

如下代码,将字符串 “fcode.cn” 转换成 EBCDIC 编码,然后再转换回来。执行后输出为:

fcode.cn

唭杽匥儠

fcode.cn

Program www_fcode_cn

Implicit None

Character(len=8) :: str = "fcode.cn"

write(*,*) str

call ASCII2EBCDIC( str )

write(*,*) str

call EBCDIC2ASCII( str )

write(*,*) str

End Program www_fcode_cn

Subroutine EBCDIC2ASCII( buffer )

! Map a block of EBCDIC characters to ASCII

! modify from : eamap @ L. Weissman Mar. 1980

Implicit None

Integer , parameter :: ebcdic(256) = [ &

32,1,2,3,32,9,32,127,32,32,32,11,12,13,14,15, &

16,17,18,19,32,32,8,32,24,25,32,32,28,29,30,31, &

32,32,32,32,32,10,23,27,32,32,32,32,32,5,6,7,32, &

32,22,32,32,32,32,4,32,32,32,32,20,21,32,26,32, &

32,32,32,32,32,32,32,32,32,32,46,60,40,43,124,38, &

32,32,32,32,32,32,32,32,32,33,36,42,41,59,94,45, &

47,32,32,32,32,32,32,32,32,124,44,37,95,62,63,32, &

32,32,32,32,32,32,32,32,96,58,35,64,39,61,34,32, &

97,98,99,100,101,102,103,104,105,32,123,32,40,43, &

32,32,106,107,108,109,110,111,112,113,114,32,125, &

32,41,32,32,32,126,115,116,117,118,119,120,121,122,&

32,32,32,91,32,32,32,32,32,32,32,32,32,32,32,32, &

32,32,32,93,32,45,123,65,66,67,68,69,70,71,72,73, &

32,32,32,32,32,32,125,74,75,76,77,78,79,80,81,82, &

32,32,32,32,32,32,92,32,83,84,85,86,87,88,89,90, &

32,32,32,32,32,32,48,49,50,51,52,53,54,55,56,57, &

124,32,32,32,32,32]

Character(Len=*) buffer

integer :: i , l

If (len(buffer)<=0) Return

Do i = 1, len(buffer)

l = ichar(buffer(i:i))

If (l<0) l = l + 256

l = ebcdic(l+1)

If (l>127) l = l - 256

buffer(i:i) = char(l)

End Do

End Subroutine EBCDIC2ASCII

Subroutine ASCII2EBCDIC( buffer )

! Map a block of ASCII characters to EBCDIC

! modify from : aemap @ L. Weissman Mar 1981

Integer , parameter :: ebcdic(128) = [ &

0,1,2,3,55,45,46,47,22,5,37,11,12,13,14,15,16,17, &

18,19,60,61,50,38,24,25,63,39,34,29,53,31,64,90, &

127,123,91,108,80,125,77,93,92,78,107,96,75,97,240,&

241,242,243,244,245,246,247,248,249,122,94,76,126, &

110,111,124,193,194,195,196,197,198,199,200,201, &

209,210,211,212,213,214,215,216,217,226,227,228, &

229,230,231,232,233,74,224,79,95,109,121,129,130, &

131,132,133,134,135,136,137,145,146,147,148,149, &

150,151,152,153,162,163,164,165,166,167,168,169, &

192,106,208,161,255]

Character(len=*) buffer

If (len(buffer)<=0) Return

Do i = 1, len(buffer)

l = ichar(buffer(i:i))

If (l<0) l = l + 256

l = ebcdic(l+1)

If (l>127) l = l - 256

buffer(i:i) = char(l)

End Do

End Subroutine ASCII2EBCDIC

标签:
声明:无特别说明,转载请标明本文来源!
发布评论
正文 取消