Raz-Soft » Blog Archive » Base64 Encode and Decode - VCL
Virus “munca” »
« Diagnostic: Dependent de jocuri

Base64 Encode and Decode - VCL

Here is a way to Base64 Encode and Decode your string in Borland C++ Builder (VCL)...

    C++:
    1. // Base 64 encoder / decoder
    2. #include <vcl.h>
    3. #include <math.h>
    4. //---------------------------------------------------------------------------
    5.  
    6. AnsiString Base64Encode(AnsiString slToEnc)
    7. {
    8.   //The Base64 Table
    9.   const char Base64Table[64]=
    10.     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    11.   char * buftoenc = slToEnc.c_str();
    12.   int bufsize = slToEnc.Length() + 1;
    13.   char * encbuf = new char[slToEnc.Length() * 5];
    14.   encbuf[0] = '\0'int ilStrLen = -1;
    15.   int i=0; int b64byte[5];
    16.   unsigned char *buftemp;
    17.   AnsiString slRetVal = EmptyStr;
    18.  
    19.  
    20.   buftemp=(unsigned char *)malloc(bufsize+2);
    21.   strcpy(buftemp,buftoenc);
    22.   if (fmod(bufsize,3)==1)
    23.   {
    24.     buftemp[bufsize]='\0';
    25.     buftemp[bufsize+1]='\0';
    26.   }
    27.   if (fmod(bufsize,3)==2)buftemp[bufsize]='\0';
    28.   while (i<bufsize)
    29.   {
    30.     b64byte[0]=buftemp[i]>>2;
    31.     b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
    32.     b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
    33.     b64byte[3]=buftemp[i+2]&0x3F;
    34.     encbuf[i+(i/3)]=Base64Table[b64byte[0]];
    35.     encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
    36.     encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
    37.     encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
    38.     i+=3;
    39.   }
    40.   free(buftemp);
    41.  
    42.  
    43.   if (fmod(bufsize,3)==0) ilStrLen = bufsize*8/6;
    44.   else if (fmod(bufsize,3)==1) ilStrLen = ((bufsize+2)*8/6)-2;
    45.   else if (fmod(bufsize,3)==2) ilStrLen = ((bufsize+1)*8/6)-1;
    46.   else ilStrLen = -1;
    47.   if(ilStrLen> 0) slRetVal = AnsiString(encbuf).SubString(1, ilStrLen);
    48.   if(encbuf != NULL) { delete encbuf; encbuf = NULL; }
    49.  
    50.   return slRetVal;
    51. }
    52.  
    53.  
    54. //-----------------------------------------------------------------------
    55.  
    56. AnsiString Base64Decode(AnsiString slToDec)
    57. {
    58.   //Base64 Table
    59.   const char Base64Table[64]=
    60.     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    61.   char * buftodec = slToDec.c_str();
    62.   int bufsize = slToDec.Length() + 1;
    63.   char * decbuf = new char[slToDec.Length() * 5];
    64.   decbuf[0] = '\0'int ilStrLen = -1;
    65.   AnsiString slRetVal = EmptyStr;
    66.  
    67.   int i=0; unsigned char binbyte[4];
    68.   int cpos[5]; unsigned char *buftemp;
    69.  
    70.   buftemp=(unsigned char *)malloc(bufsize);
    71.   strcpy(buftemp,buftodec);
    72.   if (fmod(bufsize,4)==1)
    73.   {
    74.     buftemp[bufsize]='\0';
    75.     buftemp[bufsize+1]='\0';
    76.     buftemp[bufsize+2]='\0';
    77.   }
    78.   if (fmod(bufsize,4)==2)
    79.   {
    80.     buftemp[bufsize]='\0';
    81.     buftemp[bufsize+1]='\0';
    82.   }
    83.   if (fmod(bufsize,4)==3)buftemp[bufsize]='\0';
    84.   while (i<bufsize)
    85.   {
    86.     cpos[0]=strchr(Base64Table,buftemp[i])-Base64Table;
    87.     cpos[1]=strchr(Base64Table,buftemp[i+1])-Base64Table;
    88.     cpos[2]=strchr(Base64Table,buftemp[i+2])-Base64Table;
    89.     cpos[3]=strchr(Base64Table,buftemp[i+3])-Base64Table;
    90.     binbyte[0]=((cpos[0]<<2)|(cpos[1]>>4));
    91.     binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2));
    92.     binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f));
    93.     decbuf[i-(i/4)]=binbyte[0];
    94.     decbuf[i-(i/4)+1]=binbyte[1];
    95.     decbuf[i-(i/4)+2]=binbyte[2];
    96.     i+=4;
    97.   }
    98.   free(buftemp);
    99.   if (fmod(bufsize,4)==0) ilStrLen = bufsize*6/8;
    100.   else if (fmod(bufsize,4)==1) ilStrLen = ((bufsize+3)*6/8)-3;
    101.   else if (fmod(bufsize,4)==2) ilStrLen = ((bufsize+2)*6/8)-2;
    102.   else if (fmod(bufsize,4)==3) ilStrLen = ((bufsize+1)*6/8)-1;
    103.   else ilStrLen = -1;
    104.   if(ilStrLen> 0) slRetVal = AnsiString(decbuf).SubString(1, ilStrLen);
    105.   if(decbuf != NULL) { delete decbuf; decbuf = NULL; }
    106.   return slRetVal;
    107. }

related things:

Author: Raz | On June 30th, 2007 | C++ Builder, [ En ] | No Comments

Q: So what can I do next?
A: You can Buy me a Beer or Coffee. You can say Hi! or peek on the related stuff. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

No comments yet

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> and all YM emotions