home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / mlup152.zip / base64.c next >
C/C++ Source or Header  |  1997-08-19  |  2KB  |  65 lines

  1.   
  2. #include <string.h>
  3. #include <stdio.h>
  4.   
  5. static const char BaseTable[] =
  6.                            "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7.                            "abcdefghijklmnopqrstuvwxyz"
  8.                            "0123456789+/";
  9.  
  10.  
  11. void benc( char *dst, char *s )
  12. {
  13.    int n = strlen( s );
  14.    int n3byt      = n / 3; 
  15.    int k          = n3byt * 3; 
  16.    int nrest      = n % 3;
  17.    int i          = 0;
  18.    int dstlen     = 0;
  19.  
  20.    while ( i < k )
  21.    {
  22.       dst[dstlen++] = BaseTable[(char)(( s[i]   & 0xFC) >> 2)];
  23.       dst[dstlen++] = BaseTable[(char)(((s[i]   & 0x03) << 4) | ((s[i+1] & 0xF0) >> 4))];
  24.       dst[dstlen++] = BaseTable[(char)(((s[i+1] & 0x0F) << 2) | ((s[i+2] & 0xC0) >> 6))];
  25.       dst[dstlen++] = BaseTable[(char)(  s[i+2] & 0x3F)];
  26.  
  27.       i += 3;
  28.    }
  29.         
  30.    if (nrest==2)
  31.    {
  32.       dst[dstlen++] = BaseTable[(char)(( s[k] & 0xFC)   >> 2)];
  33.       dst[dstlen++] = BaseTable[(char)(((s[k] & 0x03)   << 4) | ((s[k+1] & 0xF0) >> 4))];
  34.       dst[dstlen++] = BaseTable[(char)(( s[k+1] & 0x0F) << 2)]; 
  35.    }
  36.    else if (nrest==1)
  37.    {
  38.       dst[dstlen++] = BaseTable[(char)((s[k] & 0xFC) >> 2)];
  39.       dst[dstlen++] = BaseTable[(char)((s[k] & 0x03) << 4)];
  40.    }
  41.  
  42.    while (dstlen%3)
  43.          dst[dstlen++] = '=';
  44.  
  45.    dst[dstlen] = '\0';
  46. }
  47.  
  48. void encbasic( char *d, const char *u, const char *p )
  49. {
  50.    char _buf[4*1024];
  51.    
  52.    strcpy( _buf, u );
  53.    strcat( _buf, ":" );
  54.    strcat( _buf, p );
  55.    benc( d, _buf );
  56. }
  57.  
  58. main(int argc, char *argv[] )
  59. {
  60.    char buf[4096];
  61.    
  62.    encbasic ( buf, argv[1], argv[2] );
  63.    printf( "%s\n", buf ); 
  64. }
  65.