hexline.f
上传用户:szhypcb168
上传日期:2007-01-06
资源大小:2187k
文件大小:1k
源码类别:

语音压缩

开发平台:

Unix_Linux

  1. c==========================================================================
  2. c
  3. c ROUTINE
  4. c             puthex & gethex
  5. c
  6. c FUNCTION
  7. c              convert integer stream to hexadecimal format
  8. c             
  9. c
  10. c SYNOPSIS
  11. c             subroutine puthex (nb, bits, line)
  12. c       entry      gethex (nb, bits, line)
  13. cc
  14. c**************************************************************************
  15. c
  16. subroutine puthex (nb, bits, line)
  17. implicit undefined(a-z)
  18. integer j, k, m, n, nb, bits(nb)
  19. character*(*) line, hex*16
  20. data hex /'0123456789ABCDEF'/
  21. c
  22. k = 0
  23. m = 0
  24. line = ' '
  25. 10 if (k .ge. nb) return
  26.    n = 0
  27.    do 15 j = 1, 4
  28.       k = k + 1
  29.       if (k .le. nb) n = or (n, ishft(bits(k).and.1, 4-j))
  30. cAlli       if (k .le. nb) n = ior (n, ishft(bits(k).and.1, 4-j))
  31. 15    continue
  32.    m = m + 1
  33.    if (m .gt. len(line)) stop 'Hex string too small'
  34.    line(m:m) = hex(n+1:n+1)
  35. goto 10
  36. c
  37. entry gethex (nb, bits, line)
  38. k = 0
  39. m = 0
  40. 20 if (k .ge. nb) return
  41.    m = m + 1
  42.    if (m .gt. len(line)) stop 'Hex string too small'
  43.    n = index (hex, line(m:m)) - 1
  44.    if (n .lt. 0) stop 'Illegal character'
  45.    do 25 j = 1, 4
  46.       k = k +  1
  47.       if (k .le. nb) bits(k) = and (ishft(n, j-4), 1)
  48. cAlli       if (k .le. nb) bits(k) = iand (ishft(n, j-4), 1)
  49. 25    continue
  50. goto 20
  51. end