hexline.c
上传用户:tsjrly
上传日期:2021-02-19
资源大小:107k
文件大小:3k
源码类别:

语音压缩

开发平台:

C/C++

  1. /**************************************************************************
  2. *
  3. * ROUTINE
  4. *               puthex (pack an array of bits into a bitstream)
  5. *
  6. * FUNCTION
  7. *               Input an array of bits and number of bits and the
  8. *               program returns a pointer to a bitstream.
  9. *
  10. * SYNOPSIS
  11. *               subroutine puthex(nb, bits, line)
  12. *
  13. *   formal 
  14. *
  15. *                       data    I/O
  16. *       name            type    type    function
  17. *       -------------------------------------------------------------------
  18. *       nb int i number of bits
  19. *       bits int i bit array
  20. *       line char o packed character bitstream
  21. *
  22. ***************************************************************************
  23. *
  24. * DESCRIPTION
  25. *
  26. *       This program packs an array of bits into a string of hex
  27. *       characters where each character represents 4 bits.  The 
  28. * character stream is nb/4 characters long.
  29. *
  30. ***************************************************************************
  31. *
  32. * CALLED BY
  33. *
  34. *       celp
  35. *
  36. * CALLS
  37. *
  38. *
  39. *
  40. **************************************************************************/
  41. #include <stdio.h>
  42. puthex(nb, bits, line)
  43. int nb, bits[];
  44. char line[];
  45. {
  46.   int i, j;
  47.   
  48.   for (j = 0; j < nb;)
  49.   {
  50.     i = 0;
  51.     do
  52.     {
  53.       i |= (bits[j]&1)<<(3 - j%4);
  54.     } while (++j%4 != 0);
  55.     sprintf(&line[j/4-1],"%X",i);
  56.   }
  57. }  
  58. /**************************************************************************
  59. *
  60. * ROUTINE
  61. *               gethex (unpack a bitstream into an array of bits)
  62. *
  63. * FUNCTION
  64. *               Input a pointer to a bitstream and number of bits,
  65. *               program returns an array of bits.
  66. *
  67. * SYNOPSIS
  68. *               subroutine gethex(nb, bits, line)
  69. *
  70. *   formal 
  71. *
  72. *                       data    I/O
  73. *       name            type    type    function
  74. *       -------------------------------------------------------------------
  75. *       nb int i number of bits
  76. *       bits int o bit array
  77. *       line char i packed character bitstream
  78. *
  79. ***************************************************************************
  80. *
  81. * DESCRIPTION
  82. *
  83. *       This routine takes a string of hex characters and unpacks
  84. *       them into an array of bits, 4 bits for each character.
  85. *
  86. ***************************************************************************
  87. *
  88. * CALLED BY
  89. *
  90. *       celp
  91. *
  92. * CALLS
  93. *
  94. *
  95. *
  96. **************************************************************************/
  97. gethex(nb, bits, line)
  98. int nb, bits[];
  99. char line[];
  100. {
  101.   int i, j;
  102.   
  103.   for (j = 0; j < nb;)
  104.   {
  105.     sscanf(&line[j/4],"%1X",&i);
  106.     do
  107.     {
  108.       bits[j] = ((int) (i & (1 << (3 - j%4))) != 0);
  109.     } while (++j%4 != 0);
  110.   }
  111. }