这有个对char *的。
/*  base64 en/decoder  - Ver 1.01 -  Programmed by hsj  : 99.07.29                     : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h>   int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *);   void main(int argc,char *argv[]) {     int ret;       if(argc<4)         usage(argv[0]);     if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0))         usage(argv[0]);     switch(argv[1][1])     {         case 'e':             ret = base64enc(argv[2],argv[3]);             break;         case 'd':             ret = base64dec(argv[2],argv[3]);             break;     }     if(ret==0)         printf("Done...");     else         printf("Error. code[%d]\n",ret); }   int base64enc(char *infile,char *outfile) {     int i,len,llen = 0,pad = 0;     unsigned char buf[4],buf2[4],lf = '\n';     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         if((len=fread((char *)buf,1,3,fpi))==0)             break;         if(len<3)         {             pad = 3 - len;             for(i=len;i<3;i++)                 buf[i] = 0;         }         buf2[0] = buf[0] >> 2;         buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4;         buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6;         buf2[3] = buf[2] & 0x3f;         for(i=0;i<4;i++)         {             if(buf2[i]>=0 && buf2[i]<=25)                 buf2[i] = buf2[i] + 'A';             else if(buf2[i]>=26 && buf2[i]<=51)                 buf2[i] = buf2[i] - 26 + 'a';             else if(buf2[i]>=52 && buf2[i]<=61)                 buf2[i] = buf2[i] - 52 + '0';             else if(buf2[i]==62)                 buf2[i] = '+';             else if(buf2[i]==63)                 buf2[i] = '/';         }         if(pad)         {             fwrite(buf2,4-pad,1,fpo);             for(i=0;i<pad;i++)                 buf2[i] = '=';             fwrite(buf2,pad,1,fpo);         }         else             fwrite(buf2,4,1,fpo);         llen += 4;         if(llen==76)         {             fwrite(&lf,1,1,fpo);             llen = 0;         }     }     fwrite(&lf,1,1,fpo);     fclose(fpi);     fclose(fpo);     return(0); }   int base64dec(char *infile,char *outfile) {     int i,pad = 0;     unsigned char buf[4],buf2[4];     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         i = 0;         while(i<4)         {             if(fread(&buf[i],1,1,fpi)==0)                 break;             if((buf[i]!='\r')&&(buf[i]!='\n'))                 i++;         }         if(i==0)             break;         if(i!=4)         {             fclose(fpi);             fclose(fpo);             remove(outfile);             return(-3);         }         for(i=0;i<4;i++)         {             if(buf[i]>='A' && buf[i]<='Z')                 buf[i] = buf[i] - 'A';             else if(buf[i]>='a' && buf[i]<='z')                 buf[i] = buf[i] - 'a' + 26;             else if(buf[i]>='0' && buf[i]<='9')                 buf[i] = buf[i] - '0' + 52;             else if(buf[i]=='+')                 buf[i] = 62;             else if(buf[i]=='/')                 buf[i] = 63;             else if(buf[i]=='=')             {                 pad = 4 - i;                 for(;i<4;i++)                     buf[i] = 0;                 break;             }             else             {                 fclose(fpi);                 fclose(fpo);                 remove(outfile);                 return(-4);             }         }         buf2[0] = buf[0] << 2 | buf[1] >> 4;         buf2[1] = buf[1] << 4 | buf[2] >> 2;         buf2[2] = buf[2] << 6 | buf[3];         fwrite(buf2,3-pad,1,fpo);     }     fclose(fpi);     fclose(fpo);     return(0); }   void usage(char *name) {     printf("usage : $ %s [-e:d] target-file out-file\n",name);     printf("   -e : execute base64 encode.\n");     printf("   -d : execute base64 decode.\n");     exit(0); } 

解决方案 »

  1.   

    这有个对char *的。
    /*  base64 en/decoder  - Ver 1.01 -  Programmed by hsj  : 99.07.29                     : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h>   int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *);   void main(int argc,char *argv[]) {     int ret;       if(argc<4)         usage(argv[0]);     if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0))         usage(argv[0]);     switch(argv[1][1])     {         case 'e':             ret = base64enc(argv[2],argv[3]);             break;         case 'd':             ret = base64dec(argv[2],argv[3]);             break;     }     if(ret==0)         printf("Done...");     else         printf("Error. code[%d]\n",ret); }   int base64enc(char *infile,char *outfile) {     int i,len,llen = 0,pad = 0;     unsigned char buf[4],buf2[4],lf = '\n';     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         if((len=fread((char *)buf,1,3,fpi))==0)             break;         if(len<3)         {             pad = 3 - len;             for(i=len;i<3;i++)                 buf[i] = 0;         }         buf2[0] = buf[0] >> 2;         buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4;         buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6;         buf2[3] = buf[2] & 0x3f;         for(i=0;i<4;i++)         {             if(buf2[i]>=0 && buf2[i]<=25)                 buf2[i] = buf2[i] + 'A';             else if(buf2[i]>=26 && buf2[i]<=51)                 buf2[i] = buf2[i] - 26 + 'a';             else if(buf2[i]>=52 && buf2[i]<=61)                 buf2[i] = buf2[i] - 52 + '0';             else if(buf2[i]==62)                 buf2[i] = '+';             else if(buf2[i]==63)                 buf2[i] = '/';         }         if(pad)         {             fwrite(buf2,4-pad,1,fpo);             for(i=0;i<pad;i++)                 buf2[i] = '=';             fwrite(buf2,pad,1,fpo);         }         else             fwrite(buf2,4,1,fpo);         llen += 4;         if(llen==76)         {             fwrite(&lf,1,1,fpo);             llen = 0;         }     }     fwrite(&lf,1,1,fpo);     fclose(fpi);     fclose(fpo);     return(0); }   int base64dec(char *infile,char *outfile) {     int i,pad = 0;     unsigned char buf[4],buf2[4];     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         i = 0;         while(i<4)         {             if(fread(&buf[i],1,1,fpi)==0)                 break;             if((buf[i]!='\r')&&(buf[i]!='\n'))                 i++;         }         if(i==0)             break;         if(i!=4)         {             fclose(fpi);             fclose(fpo);             remove(outfile);             return(-3);         }         for(i=0;i<4;i++)         {             if(buf[i]>='A' && buf[i]<='Z')                 buf[i] = buf[i] - 'A';             else if(buf[i]>='a' && buf[i]<='z')                 buf[i] = buf[i] - 'a' + 26;             else if(buf[i]>='0' && buf[i]<='9')                 buf[i] = buf[i] - '0' + 52;             else if(buf[i]=='+')                 buf[i] = 62;             else if(buf[i]=='/')                 buf[i] = 63;             else if(buf[i]=='=')             {                 pad = 4 - i;                 for(;i<4;i++)                     buf[i] = 0;                 break;             }             else             {                 fclose(fpi);                 fclose(fpo);                 remove(outfile);                 return(-4);             }         }         buf2[0] = buf[0] << 2 | buf[1] >> 4;         buf2[1] = buf[1] << 4 | buf[2] >> 2;         buf2[2] = buf[2] << 6 | buf[3];         fwrite(buf2,3-pad,1,fpo);     }     fclose(fpi);     fclose(fpo);     return(0); }   void usage(char *name) {     printf("usage : $ %s [-e:d] target-file out-file\n",name);     printf("   -e : execute base64 encode.\n");     printf("   -d : execute base64 decode.\n");     exit(0); } 
      

  2.   

    我不要这个
    我想要这种的,这是个加密的
    CString Encode TextBase64(const CString& sText)
    {
    unsigned char cChar[255];
    int nIndex1, nIndex2, nIndex3, nIndex4;
    int nChars;
    CString sBase64 = "";
    char cTable[64 + 1];
    CString sTemp; cTable[0] = 'A';
    cTable[1] = 'B';
    cTable[2] = 'C';
    cTable[3] = 'D';
    cTable[4] = 'E';
    cTable[5] = 'F';
    cTable[6] = 'G';
    cTable[7] = 'H';
    cTable[8] = 'I';
    cTable[9] = 'J';
    cTable[10] = 'K';
    cTable[11] = 'L';
    cTable[12] = 'M';
    cTable[13] = 'N';
    cTable[14] = 'O';
    cTable[15] = 'P'; cTable[16] = 'Q';
    cTable[17] = 'R';
    cTable[18] = 'S';
    cTable[19] = 'T';
    cTable[20] = 'U';
    cTable[21] = 'V';
    cTable[22] = 'W';
    cTable[23] = 'X';
    cTable[24] = 'Y';
    cTable[25] = 'Z';
    cTable[26] = 'a';
    cTable[27] = 'b';
    cTable[28] = 'c';
    cTable[29] = 'd';
    cTable[30] = 'e';
    cTable[31] = 'f'; cTable[32] = 'g';
    cTable[33] = 'h';
    cTable[34] = 'i';
    cTable[35] = 'j';
    cTable[36] = 'k';
    cTable[37] = 'l';
    cTable[38] = 'm';
    cTable[39] = 'n';
    cTable[40] = 'o';
    cTable[41] = 'p';
    cTable[42] = 'q';
    cTable[43] = 'r';
    cTable[44] = 's';
    cTable[45] = 't';
    cTable[46] = 'u';
    cTable[47] = 'v'; cTable[48] = 'w';
    cTable[49] = 'x';
    cTable[50] = 'y';
    cTable[51] = 'z';
    cTable[52] = '0';
    cTable[53] = '1';
    cTable[54] = '2';
    cTable[55] = '3';
    cTable[56] = '4';
    cTable[57] = '5';
    cTable[58] = '6';
    cTable[59] = '7';
    cTable[60] = '8';
    cTable[61] = '9';
    cTable[62] = '+';
    cTable[63] = '/'; cTable[64] = '='; nChars = sText.GetLength();
    for (int nPos = 0; nPos < nChars; nPos++) 
    {
    cChar[nPos] = sText.GetAt(nPos);

    for (nPos = 0; nPos < nChars; nPos += 3)
    {
    if (nPos + 1 >= nChars) cChar[nPos + 1] = '0';
    if (nPos + 2 >= nChars) cChar[nPos + 2] = '0';
    nIndex4 = ( cChar[nPos + 2] & 0x3F ) & 0x3F;
    nIndex3 = ( ((cChar[nPos + 1] & 0x0F) << 2) 
    | ((cChar[nPos + 2] & 0xC0) >> 6) ) & 0x3F;
    nIndex2 = ( ((cChar[nPos] & 3) << 4) 
    | ((cChar[nPos + 1] & 0xF0) >> 4) ) & 0x3F;
    nIndex1 = ( (cChar[nPos] & 0xFC) >> 2 ) & 0x3F;
    if (nPos + 1 >= nChars)
    {
    nIndex3 = 64;
    nIndex4 = 64;
    } // end if
    if (nPos + 2 >= nChars)
    {
    nIndex4 = 64;
    } // end if
    sTemp.Format("%c%c%c%c",
     cTable[nIndex1],
     cTable[nIndex2],
     cTable[nIndex3],
     cTable[nIndex4]);
    sBase64 += sTemp;
    } // End for return sBase64;
    }