home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_02_02 / 2n02068a < prev    next >
Text File  |  1990-12-18  |  2KB  |  78 lines

  1.  
  2. /*
  3.  * File:     ltobplus.c
  4.  * Creator:  Blake Miller
  5.  * Version:  00.00.00  August 1990 
  6.  * Modified: by Leor Zolman, Oct 90
  7.  * Language: Microsoft Ouick C Version 2.0, Turbo C/C++
  8.  * Purpose:  Format String Function Test Program
  9.  *           Convert Long, Int, or Char to a Binary string.
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. char *ltobplus  ( long data, char *s,
  16.                     int msbit, int lsbit,
  17.                     int schar, int cchar );
  18.  
  19. /*
  20.  * Test program for ltobplus() function:
  21.  */
  22.                 
  23. void main ()
  24. {
  25.     char sbuf[48];
  26.     char tchr = 0x0F;
  27.     int tint = 0x0A0A;
  28.     long tlng = 0xF0F0F0F0;
  29.  
  30.     printf ( "\nDemonstrate <Data> -> <Binary String>\n");
  31.  
  32.     printf ( "Convert 0x0F       into binary string: %s\n", 
  33.     ltobplus (tchr, sbuf, 8, 0, '1', '0' ));
  34.  
  35.     printf ( "Convert 0x0A0A into binary string: %s\n", 
  36.     ltobplus (tint, sbuf, 16, 0, '1', '0' ));
  37.  
  38.     printf ( "Convert 0xF0F0F0F0 into binary string: %s\n",
  39.     ltobplus (tlng, sbuf, 32, 0, '1', '0' ));
  40.  
  41.     tchr = 0xAA;
  42.     printf ( "Convert 0xA0 into binary string: %s\n",
  43.     ltobplus (tchr, sbuf, 8, 0, 'H', 'L' ));
  44. }
  45.  
  46. /*
  47.  * Function ltobplus
  48.  *
  49.  * Binary string converter
  50.  * Convert from a number into a 'binary' string.
  51.  * That is, convert a byte, int or long into a string
  52.  * with specified characters representing '0' and '1'.
  53.  *
  54.  * Parameter s points to a caller-supplied destination buffer
  55.  * for the result string. The function returns a pointer
  56.  * to this buffer.
  57.  */
  58.  
  59. char *ltobplus (long data, char *s,
  60.                 int msbit, int lsbit,
  61.                 int schar, int cchar)
  62. {
  63.     char *saves = s;        /* save start position */
  64.     unsigned long mask;     /* bit select mask  */
  65.     unsigned long sbit;     /* start bit        */
  66.     unsigned long ebit;     /* end bit          */
  67.     
  68.     *s = '\0';                          /* clear string */
  69.     sbit = (long) 0x01 << (msbit - 1);          /* set start bit */
  70.     ebit = (long) 0x01 << lsbit;                /* set end bit */
  71.     
  72.     for (mask = sbit; mask >= ebit; mask >>= 1)
  73.         *s++ = (char) ((data & mask) ? schar : cchar);
  74.     
  75.     *s = '\0';
  76.     return saves;           /* return ptr to result */
  77. }
  78.